我有一个UICollectionViewController
类来列出一堆单元格。当用户触摸单元格时,我想使用touchesBegan
方法防止新触摸,直到第一次触摸完成其单元格的选择。
我尝试将以下代码放在我的视图控制器中,但它永远不会被调用。
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
super.touchesBegan(touches, withEvent: event)
print("touches began")
}
但是,在我的项目的其他地方,我有另一个类,它是UIViewController
的子类。在那里,我使用以下代码中的touchesBegan
来关闭该类中文本视图的键盘,并且该代码被调用就好了。
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
super.touchesBegan(touches, withEvent: event)
view.endEditing(true)
}
为什么这段代码在一个类而不是另一个类中运行?如何在我的touchesBegan
中使用UICollectionViewController
来检测我的收藏视图单元格上的触摸? Swift的解决方案将不胜感激。谢谢你的时间!
研究: 我查看了这个解决方案: Handle Touch in UiCollectionView? 但答案主要适用于该特定项目。
我尝试使用手势识别器来运行self.collectionView?.userInteractionEnabled = false
,但手势识别器不会针对selector.state == .Began
触发,仅针对.Ended
。所以我不能用它来防止进一步接触。
我也尝试使用UILongPressGestureRecognizer
做同样的事情,但是这个手势会阻止集合视图单元格侦听的默认点击手势,因此从未接收到单元格上的常规点击,因此单元格不能被选中。
我发布了一个解决方法作为答案,虽然它没有回答原来的问题。
答案 0 :(得分:0)
这是一种解决方法,但我没有使用touchesBegan
,而是使用了UICollectionViewDelegate
协议,这可以让我在UICollectionView
中选择一个单元格。
// The specified item should be selected.
override func collectionView(_ collectionView: UICollectionView, shouldSelectItemAt indexPath: IndexPath) -> Bool {
return true
}
override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
colorIndex = (indexPath as NSIndexPath).item // sets color index to the selected cell's path
let selectedCell = collectionView.cellForItem(at: indexPath) as UICollectionViewCell!
print("Cell selected: \(selectedCell)")