我在我的应用程序中有一个简单的集合视图,我使用委托在单元格被点击时得到通知,所以我实现了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选择器的情况下它不起作用。
答案 0 :(得分:2)
无需编写@objc,
这是一个有效的代码,
extension YourViewController:UICollectionViewDelegate{
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
print("didSelect")
}
}
答案 1 :(得分:0)
在viewdidload中添加委托也在故事板中添加uicollectionviewdelegae,uicollectionviewdatasource,
这对我有帮助。