有没有简单的方法来预先加载uitableview中的所有单元格?是否可以预先加载uitableview中的所有单元格?
我需要这样做以改变是否所有单元格都被检查。如果我只是使用cellForRowAtIndexPath,并且用户说取消选中所有单元格,然后检查一个可见单元格并再次开始滚动,则选中的单元格将被取消选中或者选择新加载的单元格。
看起来最简单的方法是预先加载所有单元格,如果可能的话。
谢谢!
有没有简单的方法来预先加载uitableview中的所有单元格?是否可以预先加载uitableview中的所有单元格?
我需要这样做以改变是否所有单元格都被检查。如果我只是使用cellForRowAtIndexPath,并且用户说取消选中所有单元格,然后检查一个可见单元格并再次开始滚动,则选中的单元格将被取消选中或者选择新加载的单元格。
看起来最简单的方法是预先加载所有单元格,如果可能的话。
谢谢!
请重新阅读答案我wrote here到您以前的类似问题,这解释了您的问题的一个解决方案。
同样,你应该考虑保持一个开/关设置数组。无论您想要什么,您都可以使用NSMutableArray
或int
或BOOL
值的C数组。但它绝对听起来像你需要一个数据模型。您的-tableView:cellForRowAtIndexPath:
查找此数组的值。数组中的每个值都以某种方式对应于表中的一行。
如果您只有一个部分,那么您可以简单地使用该数组的第i
th元素来设置表视图的第i
行的选中状态。如果您使用NSMutableArray
来存储NSNumber
,您可以轻松处理大小调整。
如果您有多个部分,请保留一个数组数组。每个顶级数组对应于一个部分。每个内部数组对应于一个部分的行。
如果您使用NSMutableArray
来存储NSMutableArray
s的NSNumber
s,您可以轻松处理调整大小和添加和删除部分。
方法-tableView:cellForRowAtIndexPath:
然后根据数组的值设置带或不带检查标记的单元格。
拥有数据模型可让您自由地以编程方式执行“全选”和“全部取消”按钮操作。
例如,当你点击一个按钮,“全选”细胞:
循环遍历数组,每个值设置为YES
或1
或任何“上”的标签你选择最初。
调用[tableView reloadData]
,这是一种返回-tableView:cellForRowAtIndexPath:
的方法,它将根据更新数组中值的状态设置单元格的复选标记状态。
不,你不能这样做。您似乎认为单元格代表特定的一段数据,但事实并非如此。当顶部单元格从屏幕上滚动时,通常将其回收并作为底部单元格引入。因此,一个包含数百个可以滚动的项目的列表可能只有8或9个单元被分配并初始化。
您需要重新考虑应用程序的体系结构。当你“全部取消”时,它不应该改变单元格的可视状态,它应该改变单元格表示的对象中的某个状态,然后当你在该索引路径加载对象的单元格时,应该读取该状态并设置适当的复选标记。
您的单元格的视觉状态的变化应始终响应您的基础模型的变化。
请勿使用单元格作为数据库。
你的细胞只是一个狭窄的窗口到你的数据。这些单元格仅显示底层数据中的一些对象。如果您尝试预先加载所有单元格以便可以全部选中它们,则UITableView可能会死亡缓慢或爬行缓慢。特别是如果我们正在谈论数百个条目。
如果要选择数据中的所有项目,可以直接调用数据来选择其对象。然后,您将数据重新加载到您的TableView中,并使用reloadData
,如果一切正常,您的单元格将显示所选状态。
阅读UITableView。看看苹果的样品。您需要查看从视图和控制器中分离的数据。