我是swift的新手,在编程中选择collectionView中的collectionview单元时遇到了麻烦。我只找到了tableview的说明,但在尝试实现它时遇到了错误。
let indexPath = IndexPath(row: 0, section: 0)
appsCollectionView.selectItem(at: indexPath, animated: false, scrollPosition: .bottom)
appsCollectionView.delegate?.collectionView!(appsCollectionView, didSelectItemAt: indexPath)
根据其他答案,您需要第2行和第3行。不确定第3行是做什么的。当我尝试运行此代码时,我收到了错误
collectionView:didSelectItemAtIndexPath:]: unrecognized selector sent to instance
谢谢!
答案 0 :(得分:2)
此错误基本上只是告诉您您没有实施UICollectionViewDelegate
协议collectionView(_,didSelectItemAt:_)
方法,但我认为您不应该直接调用该方法(第3行) )。
我非常确定调用selectItem(at:,animated:,scrollPosition:)
(第2行)就足够了。集合视图应滚动到所选单元格,单元格外观应更改为选定状态。但也许你的细胞外观在被选中时没有变化,这让你相信它没有被选中?
如果情况不是这样,请在UICollectionViewCell
子类中覆盖以下属性,例如,更改某个标签的颜色:
override var isHighlighted: Bool {
didSet {
titleLabel.textColor = isHighlighted || isSelected ? .black : .darkGray
}
}
override var isSelected: Bool {
didSet {
titleLabel.textColor = isHighlighted || isSelected ? .black : .darkGray
}
}
然后尝试只拨打selectItem(at:,animated:,scrollPosition:)
,也许您会注意到差异。
注意:正如selectItem(at:,animated:,scrollPosition:)
方法文档中所述:
此方法不会导致调用任何与选择相关的委托方法。
它只会将单元格状态更改为选中状态,而不会调用任何在您单击该单元格时调用的操作。
答案 1 :(得分:1)
根据其他答案,您需要第2行和第3行。不确定是什么 第3行正在做。当我尝试运行此代码时,我收到了错误
collectionView:didSelectItemAtIndexPath:]:发送无法识别的选择器 实例
您不需要调用collectionView委托方法明确。相反,如果您刚刚设置了委托,那么只需实现该方法。
optional func collectionView(_ collectionView: UICollectionView,
didSelectItemAt indexPath: IndexPath)