2009-12-08 26 views
1

我試圖讓用戶滾動到UITableView的底部時UIActivityIndi​​catorView「顯示和動畫」。當用戶滾動到UITableView的底部時觸發網絡請求

在到達表視圖,一個Web請求時,將採取幾秒鐘就可以完成,然後UIActivityIndi​​catorView應該「停止和隱藏」

我觸發UIActivityIndi​​catorView外觀的底部使用的tableView:willDisplayCell:forRowAtIndexPath:

列表項

但問題是,UIActivityIndi​​catorView不會在iPhone屏幕上出現,直到整個方法(即後的tableView:willDisplayCell:forRowAtInd exPath :)被調用,到那時它已經被隱藏了。

任何想法如何:

  1. 顯示指示器視圖
  2. 使Web請求
  3. 隱藏指示燈看法?

新線程?更好的方法?

謝謝!

具體而言,我的功能看起來像這樣

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (self.results && indexPath.row == [self.results count] - 1) { 
     [self.loadingSignal setHidden:NO]; // <====== my UIActivityIndicatorView is called "loadingSignal" 
     [self.loadingSignal startAnimating]; 

    /// make web request that will take a few seconds 

     [self.loadingSignal setHidden:YES]; 
     [self.loadingSignal stopAnimating]; 

     } 
    } 
} 

回答

1

好。從上面的代碼片段中,我看到一些問題:

  1. 您似乎計劃在顯示單元格之前等待請求完成。這有一些負面影響:對用戶來說很煩人,而且很可能會在請求消失時凍結UI(這可能需要幾秒鐘的時間)。
  2. 一切發生在willDisplayCell方法中。

以下是我認爲你應該解決這個問題:

  1. 有無將顯示單元格觸發裝載異步
  2. 顯示,上面寫着「載入中...」,上面有你的微調細胞(見的Tweetie 2靈感)
  3. 等待您的請求回叫
  4. 填充你的模型與響應
  5. 刪除「正在加載...」細胞
  6. 強制您的數據重載[tableView reloadData]

這應該讓你實現你想要做什麼。

+0

您可以詳細說明第1步嗎? – user141146 2009-12-08 19:16:28

+0

太棒了。這是完美的工作!謝謝。 – user141146 2009-12-08 20:24:08

1

你可以嘗試在方法的UITableView

相關問題