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

Yin*_*ing 23 iphone objective-c

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

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

mah*_*udz 40

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

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

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

  • 另一种方法是将`UITableViews.dataSource`属性设置为nil,直到您准备加载它为止.然后你设置它并调用`reloadData`.如果您只需要等待一个请求完成初始表加载,那么这很有用. (6认同)

Hem*_*ang 6

如果你已经UITableView从IB 设置了数据源和委托,那么numberOfRowsInSection当你推送到视图时它至少会用于 方法,但是如果你从a显示数据NSArray,如果数组仍然为空,它将返回计数ZERO,因此表赢了不去打其他方法.

在实践中,我是从Web服务将数据提取喂表,所以我不设立从IB的数据源和委托,而不是一旦我得到的数据和状态OK响应我设置tableview.datasource = selftableview.delegate = self,然后调用reloadData方法来更新表.这可以确保它不会用于numberOfRowsInSection方法,因为您不需要在没有数据的情况下调用它.