2012-04-18 108 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]; 
} 

我得到的行爲是fetchData執行的UITextView呈現在屏幕前。我知道這一點,因爲我的NSLog在fetchData裏面,在UITextView出現在屏幕上之前執行。

有什麼明顯的我在這裏失蹤?謝謝。

回答

1

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

然後你fetchData方法內部更換[self fetchData];,您的抓取完成後,加

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

其中新方法fetchDataFinished被定義爲

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

注你必須做出textView一個屬性,所以它可以在這個方法中訪問。

我還沒有嘗試了上面你的具體情況,但我已經成功地在許多類似的情況下使用了類似的結構。