在我的视图控制器中,我正在加载带有子类的自定义CollectionViewCell。根据单元格索引路径的位置,我想以不同的方式设置文本标签的格式。即第一行只有一个具有较大文本的单元格,而第二行有两个具有较小文本的单元格。
如何从UICollectionViewCell子类的UICollectionView访问索引路径?我尝试了委托协议,但这总是返回nil。
下面的代码,非常感谢!
马库斯
UICollectionViewController:
RepeatableRead
UICollectionViewCell.swift
UPDLOCK, HOLDLOCK, ROWLOCK
答案 0 :(得分:2)
通过UICollectionView delegate
方法collectionView(_, didSelectItemAt _)
获取单元格实例。
extension WorkoutDataViewControllerCV: UICollectionViewDelegate {
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
if let cell = collectionView.cellForItem(at: indexPath) as? MeasurementCollectionViewCell {
cell.selectedIndexPath(indexPath)
}
}
}
indexPath
将作为方法selectedIndexPath
中的参数从上述方法传递给MeasurementCollectionViewCell
。
class MeasurementCollectionViewCell: UICollectionViewCell {
......
func selectedIndexPath(_ indexPath: IndexPath) {
//Do your business here.
}
}
答案 1 :(得分:1)
您可以使用响应者链来获取单元格的集合视图,通过该单元格可以获取索引路径。只需将这些扩展名添加到名为UICollectionViewCell+IndexPath.swift
的新文件中即可。
extension UIResponder {
func next<T: UIResponder>(_ type: T.Type) -> T? {
return next as? T ?? next?.next(type)
}
}
extension UICollectionViewCell {
var indexPath: IndexPath? {
return next(UICollectionView.self)?.indexPath(for: self)
}
}
现在在您的单元格中,您可以使用self.indexPath
答案 2 :(得分:1)
相当简单的方法是将indexPath
存储到UICollectionViewCell
类的子类中。从cellForRow at: index path
返回时进行分配。因此,现在,子类化的collectionviewcell可以访问其自身的indexpath