如何停止加载UITableView直到获取数据?
据我所知,UITableView
将调用-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
方法来获取表视图的每个单元格。假设我的数据源是通过互联网获取的,我必须考虑延迟。什么是停止这种方法被调用的最佳方式?它应该阻止应用程序中的布尔标志吗?我是否应该在我的应用程序中再次拨打cellForRowAtIndexPath
?如何停止加载UITableView直到获取数据?
我不确定该函数何时被调用,即UITableView
本身“刷新”的频率。任何解释都会有帮助!谢谢!
如果您没有数据,或者您没有其他单元格的数据,则只要您不告诉UTableView您有rowCounts或新的rowCounts,则不会调用cellForRowAtIndex:
。该值在numberOfRowsInSection:
中设定。
换句话说,不要报告numberOfRowsInSection:
中的任何新单元格,直到您实际掌握了这些数据,然后cellForRowAtIndexPath:
不会被过早地调用。
当您获取附加行数据时,请致电reloadData
以获取UITableView以询问行数,然后致电cellForRowAtIndex:
。
你应该做的是在数据完成读取时在你的表视图上调用reloadData。这将强制表视图再次调用它的委托方法进行显示。无论何时需要重新显示表视图,都会调用这些方法,因此无论是何时显示,滚动还是您手动调用reloadData。
如果您已经设置了UITableView
数据源和IB代理,那么当您推送到视图时,它至少会使用numberOfRowsInSection
方法,但是如果显示的数据来自NSArray
,则它将返回计数ZERO,如果数组仍然是空的,所以表格不会用于其他方法的调用。
在实践中,我是从Web服务将数据提取喂表,所以我不设立从IB的数据源和委托,而不是一旦我得到的数据和状态OK
响应我设置tableview.datasource = self
和tableview.delegate = self
然后调用reloadData
方法更新表。这确保它不会用于numberOfRowsInSection
方法,因为您不需要在没有数据的情况下调用它。
当您调用[tableView reloadData]
时,框架会自动为当前可见的表视图单元格(不是为tableview的所有单元格)再次调用所有数据源方法。所以最好的方法是每次从互联网获取数据时调用reloadData。
感谢您的回答。以后如何设置numeberOfRowsInSection?当reloadData被调用时,cellForRowAtIndex或numberOfRowsInSection会自动调用吗? – Ying 2010-02-17 00:51:02
是的,当你调用reloadData时,这些调用将会自动进行。 – mahboudz 2010-02-17 07:17:55
另一种方法是在您准备好加载它之前,将“UITableViews.dataSource”属性设置为零。然后你设置它并调用'reloadData'。如果您只需要等待一个请求完成初始表加载,则此功能非常有用。 – zekel 2012-10-15 13:45:46