如何以编程方式在swift 3中的collectionView中选择单元格?

时间:2017-08-04 01:22:35

标签: ios swift collectionview

我是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

谢谢!

2 个答案:

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