2012-04-18 3 views
0

私はtableViewと、URLからデータを取得し、コストのかかる操作(特にフェッチ部分)を再ロードする「再読み込み」ボタンを持っています。UITextViewの表示が遅れました

これが起こっている間に表示情報を表示したいので、上に "読み込み中の" UITextViewを配置し、フェッチ/リロード操作を行い、次にUITextViewを削除します。

は、ここでは、コードです:

- (IBAction)refreshData:(id)sender { 

    UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height-30, self.view.frame.size.width, 30)]; 
    [self.view addSubview:textView]; 
    textView.text = @"Loading.."; 
    textView.textColor = [UIColor whiteColor]; 
    textView.backgroundColor = [UIColor grayColor]; 
    textView.editable = NO; 

    [self fetchData]; 
    [self.tableView reloadData]; 

    [textView removeFromSuperview]; 
} 

私が得る行動はUITextViewが画面上に描画する前なFetchDataが実行されるということです。 UITextViewが画面に表示される前に実行されるfetchDataの中にNSLogsがあるので、私はこれを知っています。

ここには何かがありますか?ありがとう。

答えて

1

あなたが行われているフェッチした後、新しい方法fetchDataFinished

-(void) fetchDataFinished{ 
    [self.tableView reloadData]; 
    [self.textView removeFromSuperview]; 
} 

ノートのように定義されて

[self performSelectorOnMainThread:@selector(fetchDataFinished) withObject:nil waitUntilDone:NO]; 

を追加し、あなたのfetchDataメソッド内で次に

[self performSelectorInBackground:@selector(fetchData) withObject:nil]; 

[self fetchData];を交換してくださいあなたが作る必要があるのはtextViewこのメソッドでアクセス可能なプロパティ。

私はあなたの特定のケースでは上記を試していませんが、多くの同様の状況で同様の構造をうまく使っています。

関連する問題