我了解UITableView
会调用-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
方法来获取表格视图的每个单元格。假设我的数据源是通过互联网获取的,我必须考虑延迟。 “停止”调用此方法的最佳方法是什么?它应该阻止应用程序中的布尔标志吗?我应该在申请表中再次拨打cellForRowAtIndexPath
吗?
我不确定函数何时被调用,即UITableView
“刷新”自身的频率。任何解释都会有所帮助!谢谢!
答案 0 :(得分:39)
如果您没有数据,或者您没有其他单元格的数据,那么只要您没有告诉UTableView您有rowCounts或new rowCounts,就不会调用cellForRowAtIndex:
。该值在numberOfRowsInSection:
中设置。
换句话说,在numberOfRowsInSection:
中不报告任何新单元格,直到您实际拥有该数据,然后才会过早调用cellForRowAtIndexPath:
。
当你获得额外的行数据时,请调用reloadData
让UITableView询问行数,然后调用cellForRowAtIndex:
。
答案 1 :(得分:6)
如果您已设置UITableView
数据源并从IB委派,那么当您推送到视图时它至少会采用numberOfRowsInSection
方法,但是如果您显示{{1}的数据如果数组仍为空,它将返回计数ZERO,因此表不会用于其他方法调用。
实际上,我正在从Web服务中提取数据来提供表格,所以我没有设置数据源并从IB获得委托,一旦我获得数据和状态NSArray
响应我就设置了OK
和tableview.datasource = self
然后调用tableview.delegate = self
方法更新表格。这样可以确保它不会使用reloadData
方法,因为您不需要在没有数据的情况下调用它。
答案 2 :(得分:1)
在获取数据时,您应该在表视图上调用reloadData。这将强制表视图再次调用它的委托方法进行显示。只要表视图需要重新显示,就会调用这些方法,因此当它进入视图时,会发生滚动,或者您手动调用reloadData。
答案 3 :(得分:1)
当您调用[tableView reloadData]
时,框架会自动再次为当前可见的表视图单元格调用所有数据源方法(不适用于tableview的所有单元格)。所以最好的方法是每次从互联网上获取数据时调用reloadData。