Iphone 是否可以在uitableview中预加载所有单元格?

Iphone 是否可以在uitableview中预加载所有单元格?,iphone,objective-c,uitableview,Iphone,Objective C,Uitableview,是否有一种简单的方法可以在uitableview中预加载所有单元格 我需要这样做,以更改是否检查了所有单元格。如果我只使用cellForRowAtIndexPath,用户说取消选中所有单元格,然后检查一个可见单元格并再次开始滚动,则选中的单元格被取消选中,或者新加载的单元格被选中 如果可能的话,最简单的方法似乎是预加载所有单元 谢谢 不,你不能这样做。你似乎觉得一个单元格代表一个特定的数据块,但它不是。当顶部单元格从屏幕上滚下时,它通常被回收并作为底部单元格带入。因此,一个包含数百个项目的列表可

是否有一种简单的方法可以在uitableview中预加载所有单元格

我需要这样做,以更改是否检查了所有单元格。如果我只使用cellForRowAtIndexPath,用户说取消选中所有单元格,然后检查一个可见单元格并再次开始滚动,则选中的单元格被取消选中,或者新加载的单元格被选中

如果可能的话,最简单的方法似乎是预加载所有单元


谢谢

不,你不能这样做。你似乎觉得一个单元格代表一个特定的数据块,但它不是。当顶部单元格从屏幕上滚下时,它通常被回收并作为底部单元格带入。因此,一个包含数百个项目的列表可能只有8或9个单元格被分配和初始化

您需要重新考虑应用程序的体系结构。当您取消选中“全部”时,它不应更改单元格的可视状态,它应更改单元格表示的对象中的某些状态,然后当您在该索引路径处加载对象的单元格时,您应读取该状态并适当设置复选标记


单元格可视状态的更改应始终响应基础模型的更改。

不要将单元格用作数据库

您的单元格只是查看数据的一个狭窄窗口。这些单元格仅显示基础数据中的一些对象。如果您尝试预加载所有单元格,以便选择所有单元格,则UITableView可能会缓慢死亡或缓慢爬行。特别是如果我们谈论的是成百上千的条目

如果要选择数据中的所有项目,可以直接调用数据来选择其对象。然后,使用reloadData将数据重新加载到TableView中,如果一切设置正确,单元格将显示选定状态


阅读UITableView。看看苹果的样品。您需要看到数据与视图和控制器的分离。

请重新阅读您之前类似问题的答案I,其中解释了您问题的一种解决方案

再次,您应该考虑保持一个ON/OFF设置数组。您可以使用NSMutableArray或int或BOOL值的C数组,无论您想要什么。但听起来你确实需要一个数据模型

Your-tableView:cellforrowatinexpath:查找此数组的值。数组中的每个值都以某种方式对应于表中的一行

如果只有一个部分,那么可以简单地使用数组的第i个元素来设置表视图第i行的选中状态。如果使用NSMUTABLEARRY存储NSNumbers,则可以非常轻松地处理大小调整

如果有多个节,请保留一个数组数组。每个顶级数组对应一个节。每个内部数组对应于节的行

如果使用NSMutableArray存储NSNumbers的NSMutableArray,则可以非常轻松地处理大小调整和节的添加和删除

方法-tableView:cellforrowatinexpath:然后根据数组的值设置带或不带复选标记的单元格

拥有数据模型使您可以自由地以编程方式执行“全选”和“取消全选”按钮操作

例如,单击按钮选择所有单元格时:

循环遍历数组,并将每个值设置为“是”或“1”,或您最初选择的标签上的任何值

调用[tableView reloadData],这是一个返回到-tableView:cellForRowAtIndexPath:的方法,该方法将根据更新数组中值的状态设置单元格的复选标记状态