如何通过 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.
为什么要更改隐藏的东西的颜色?
@loki 你在尝试什么?
不要直接更改视图(单元格)中的任何内容。向您的模型(数据源数组)添加一个属性,更改它并重新加载集合视图。在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 中的特定单元格