如何通过 UICollectionView 访问 UICollectionViewCell?

Posted

技术标签:

【中文标题】如何通过 UICollectionView 访问 UICollectionViewCell?【英文标题】:How to access UICollectionViewCell via UICollectionView? 【发布时间】:2017-04-10 14:39:03 【问题描述】:

我有一个UICollectionView 链接为@IBOutlet。现在我想访问里面的任何单元格(隐藏的)。 IE。改变单元格的颜色。

我找到的所有方法都需要 IndexPath,但我从哪里得到这个?

【问题讨论】:

Now I want to access any of the cells inside (which are hidden). I.e. to change the color of the cell. 为什么要更改隐藏的东西的颜色? @lok​​i 你在尝试什么? 不要直接更改视图(单元格)中的任何内容。向您的模型(数据源数组)添加一个属性,更改它并重新加载集合视图。在cellForItem中根据属性的状态设置颜色。 欢迎来到 *** :) 当您提出问题时,包括您迄今为止尝试过的内容(代码或研究)会有所帮助,这将有助于提高获得好答案的机会.当您提出下一个问题时,请查看***.com/help/how-to-ask @Larme:所以当它再次可见时,它就有了新的颜色。可以晚一点。 【参考方案1】:

有几种方法可以创建 IndexPath,它们都列在 IndexPath documentation 的 Initializers 部分中。

例如,如果你想访问第一部分中的第一项,你可以使用这个初始化器:

let index = IndexPath(item: 0, section: 0)
let cell = collectionView.cellForItem(at: index)

由于您是 Swift 新手,可能还值得学习一些使用 UICollectionView 的一般示例和教程,这是一个很好的起点:How to make a simple collection view with Swift。

【讨论】:

小心:作者通过“隐藏”表示不在屏幕上,cell 应该是nil 并且无法设置任何内容。 @Larme 很有趣! 相应索引路径处的单元格对象,如果单元格不可见或索引路径超出范围,则为 nil。 ...我学到了一些新东西 :) 如果您正确理解了单元格的重用,这很正常。您调用的超出屏幕的单元格可能已被重复使用,并且当前为另一个 indexPath 服务。 这是否意味着隐藏单元格没有 IndexPath ?【参考方案2】:

我猜你想访问集合视图上的单元格。所以可能你希望你的视图控制器类继承自 UICollectionViewController 然后重写方法 cellForItemAt:

类似:

class myViewController: UICollectionViewController, ... 
   ...
   override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
      ...
   

尝试创建一个新文件,然后选择 cocoa 类,然后选择它是 UICollectionViewController 的子类。要覆盖的方法应该自动存在。

【讨论】:

好吧,我的意思是在 UIViewController 内部我有一个链接到集合视图的 @IBOutlet 弱变量。我从来没有说过任何关于 ControllerView 的事情。 可能是错字,因为您的问题已被编辑。感谢您的澄清。

以上是关于如何通过 UICollectionView 访问 UICollectionViewCell?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 UICollectionViewCell 访问 UICollectionView 中 Cell 的 indexPath

如何从 UICollectionView.CellRegistration 访问更新的数据源

页面加载时滚动后如何访问 UICollectionView 中的特定单元格?

如何在 willDisplay 单元格回调中访问 UICollectionView 中的特定单元格

如何从目标函数集(Swift 3)访问 UICollectionView 中的按钮

UICollectionView设置列数