UITableView 小记
由于项目的需要,所以需要这么一种功能,遍历tableview的所有cell.
查看文档发现,UITableView提供了两个方法,可以访问tableview的cell
- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath
cellForRowAtIndexPath: 根据indexPath返回一个特定的cell。但它有个问题就是,只返回可见的cell,也就是说,当需要返回那些不在当前屏幕的cell时,返回值为空。
之所以会这样,是因为一般tableview 都会维护一个cell 池,重复利用这个池中的cell,减小内存开销。所以,cellForRowAtIndexPath无法返回那些不可见的cell
- (UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier
dequeueReusableCellWithIdentifier: 根据identifier返回cell池中具有相同identifier的cell,如果不存在有identifier为这个identifier的cell,则返回为空。
而且,无论有无这样的cell,它也只返回当前不可见且具有相同identifier的cell.
所以,如果想要按要求遍历所有cell的话,首先每个cell必须是独立的,即不能被其它row重用;然后,需要结合两种方法才能遍历所有的cell.
但其实遍历所有cell是个不好的解决方法,ios应该也是不提倡开发者遍历所有cell的。而且应该在每一行的数据改变时,恰当的更改数据,并不应该以cell的数据为标准。
这里是一个类似问题的讨论 http://www.iphonedevsdk.com/forum/iphone-sdk-development/11822-how-can-i-iterate-over-all-cells-uitableview.html