实现一个类似于 UITableView 将已创建的单元格出列的方式的系统
Posted
技术标签:
【中文标题】实现一个类似于 UITableView 将已创建的单元格出列的方式的系统【英文标题】:Implement a system similar to the way UITableView dequeues cells already created 【发布时间】:2011-01-01 23:03:26 【问题描述】:我需要实现一个网格来在 iPad 上显示一些视图实体。 为了充分利用 SDK,我想我会使用 UITableView 来跟踪我的 行,然后实现某种枚举器以返回正确的列以放入我的单元格中。
枚举器运行良好。我只是将 tableViews viewController 传递给一维数组,然后枚举器将其拆分为“伪二维集”,但是,我想让网格对行和列都使用类似于 UITableViews 的方法:
[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
现在我构建了每行所需的列视图数量,并将它们手动添加到cellForRowAtIndexPath:
中的单元格中
我想做一个类似的方法:
columnsForRowAtIndexPath:
让它像cellForRowAtIndexPath..
一样工作
所以问题是 tableView 如何避免一遍又一遍地初始化我的单元格,以及如何实现类似的行为?
-
我无法确定 tableView 是复制单元格还是使用 NSCoding 构建新单元格以以最小的开销返回单元格。 猜猜 NSMatrix 在 ios 中会很不错。
【问题讨论】:
似乎 NSMutableSet 是一个可能的起点,所以我想这并不涉及“魔法”:所有单元格都被分配、初始化和保留,永远不会超过一次。 【参考方案1】:看起来您已经回答了自己的问题,但为了确认您的怀疑,通常您会首先尝试使用 [myCache anyObject]
从 NSMutableSet
检索对象。如果您以这种方式成功检索对象,请确保将其从集合中移除,以免再次被抓取。另一方面,如果-anyObject
返回nil
,那么缓存中没有足够的缓存对象来满足您的需要,因此您需要创建一个新对象(并确保在您使用时将其放回缓存中) '完成)。
这只是实现目标的一种方式。
有意义吗?
【讨论】:
感谢布拉德,这说明了如何处理它。在考虑了几个小时后,我确实得到了一些疑问。也许它是“冗余”的,因为 tableview 缓存了单元格,它也会缓存我放入其中的“水平”内容 - 所以也许更好的方法只是构建一些逻辑来计算我应该在 cellForRowAtIndexPath 中插入多少列和然后让 tableView 处理它。无论如何,我必须在 didSelectRowAtIndexPath 中做类似的事情来拉出正确的数据对象。认为我应该在实现 TableView Matrix 之前进行测试:)以上是关于实现一个类似于 UITableView 将已创建的单元格出列的方式的系统的主要内容,如果未能解决你的问题,请参考以下文章
如何使用子视图的延迟/动态加载实现自定义 UIView,类似于 UITableView
SwiftUI 中的 List 是不是复用类似于 UITableView 的单元格?