如何在加载数据之前停止加载UITableView?

时间:2010-02-16 19:17:00

标签: iphone objective-c

我了解UITableView会调用-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath方法来获取表格视图的每个单元格。假设我的数据源是通过互联网获取的,我必须考虑延迟。 “停止”调用此方法的最佳方法是什么?它应该阻止应用程序中的布尔标志吗?我应该在申请表中再次拨打cellForRowAtIndexPath吗?

我不确定函数何时被调用,即UITableView“刷新”自身的频率。任何解释都会有所帮助!谢谢!

4 个答案:

答案 0 :(得分:39)

如果您没有数据,或者您没有其他单元格的数据,那么只要您没有告诉UTableView您有rowCounts或new rowCounts,就不会调用cellForRowAtIndex: 。该值在numberOfRowsInSection:中设置。

换句话说,在numberOfRowsInSection:中不报告任何新单元格,直到您实际拥有该数据,然后才会过早调用cellForRowAtIndexPath:

当你获得额外的行数据时,请调用reloadData让UITableView询问行数,然后调用cellForRowAtIndex:

答案 1 :(得分:6)

如果您已设置UITableView数据源并从IB委派,那么当您推送到视图时它至少会采用numberOfRowsInSection方法,但是如果您显示{{1}的数据如果数组仍为空,它将返回计数ZERO,因此表不会用于其他方法调用。

实际上,我正在从Web服务中提取数据来提供表格,所以我没有设置数据源并从IB获得委托,一旦我获得数据和状态NSArray响应我就设置了OKtableview.datasource = self然后调用tableview.delegate = self方法更新表格。这样可以确保它不会使用reloadData方法,因为您不需要在没有数据的情况下调用它。

答案 2 :(得分:1)

在获取数据时,您应该在表视图上调用reloadData。这将强制表视图再次调用它的委托方法进行显示。只要表视图需要重新显示,就会调用这些方法,因此当它进入视图时,会发生滚动,或者您手动调用reloadData。

答案 3 :(得分:1)

当您调用[tableView reloadData]时,框架会自动再次为当前可见的表视图单元格调用所有数据源方法(不适用于tableview的所有单元格)。所以最好的方法是每次从互联网上获取数据时调用reloadData。