在Swift 3迁移后,CollectionViewDelegate方法不会被调用

时间:2016-10-12 17:31:58

标签: ios swift uicollectionview swift3

我在我的应用程序中有一个简单的集合视图,我使用委托在单元格被点击时得到通知,所以我实现了didSelectItemAtIndexPath:方法。在Swift 2中,这种方法的签名看起来像这样:

@objc func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath)

运行迁移过程后,此签名更改为:

@objc func collectionView(collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)

编译器很开心,我继续前进,但现在这个方法在我点击任何单元格时都没有被触发。我找到了解决问题的方法:

@objc(collectionView:didSelectItemAtIndexPath:) func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)

显然,问题出现在第一个参数名称中,但我仍然不明白为什么在没有明确指定obj-c选择器的情况下它不起作用。

2 个答案:

答案 0 :(得分:2)

无需编写@objc,

这是一个有效的代码,

extension YourViewController:UICollectionViewDelegate{
    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        print("didSelect")
    }
}

答案 1 :(得分:0)

在viewdidload中添加委托也在故事板中添加uicollectionviewdelegae,uicollectionviewdatasource,

这对我有帮助。