touchesBegan不在UICollectionViewController中触发

问题描述 投票:3回答:1

我有一个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做同样的事情,但是这个手势阻止了集合视图单元格侦听的默认点击手势,因此从未接收到单元格上的常规点击,因此无法选择单元格。

我发布了一个解决方法作为答案,虽然它没有回答原始问题。

ios swift uicollectionview touchesbegan uicollectionviewdelegate
1个回答
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)")
© www.soinside.com 2019 - 2024. All rights reserved.