从UICollectionViewController获取indexPath到UICollectionViewCell子类

时间:2018-11-07 16:33:46

标签: ios swift uicollectionviewcell

在我的视图控制器中,我正在加载带有子类的自定义CollectionViewCell。根据单元格索引路径的位置,我想以不同的方式设置文本标签的格式。即第一行只有一个具有较大文本的单元格,而第二行有两个具有较小文本的单元格。

如何从UICollectionViewCell子类的UICollectionView访问索引路径?我尝试了委托协议,但这总是返回nil。

下面的代码,非常感谢!

马库斯

UICollectionViewController:

RepeatableRead

UICollectionViewCell.swift

UPDLOCK, HOLDLOCK, ROWLOCK

3 个答案:

答案 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