如何禁用CollectionView的垂直手势识别器?

时间:2018-01-19 13:09:07

标签: ios swift uicollectionview uigesturerecognizer

我正在使用LNPopupController框架来呈现视图控制器,可以通过拖动它来解除显示的VC,但是我已经在此VC中添加了一个集合视图并且在其区域中拖动手指并不会拖动VC倒了。我希望这个CollectionView水平滚动,我尝试继承UICollectionView并使用

gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool

方法,但它没有任何区别。 这是我的代码:

class MyCollectionView: UICollectionView, UIGestureRecognizerDelegate {

    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        return true
    }
}
viewDidLoad()

中的

func setupCollection() {
    cellSize = CGSize(width: self.view.frame.width, height: self.view.frame.width)
    collectionView.delegate = self
    collectionView.dataSource = self
    if let layout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
        layout.scrollDirection = .horizontal
    }
    //collectionView.isScrollEnabled = false 
    collectionView.isPagingEnabled = true
    collectionView.alwaysBounceVertical = false
}

当禁用滚动时一切正常,我可以通过拖动CollectionView的区域来关闭视图。

2 个答案:

答案 0 :(得分:2)

首先,我将在包含集合视图的视图控制器中实现UIGestureRecognizerDelegate

extension MyViewController: UIGestureRecognizerDelegate {

    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        return true
    }
}

然后你还需要将这个委托设置为正确的手势识别器 - 在你的代码中我没有看到任何这样的行将委托分配给任何一个手势识别器。我会将它分配给负责解除viewController的手势识别器:

self.popupContentView.popupInteractionGestureRecognizer.delegate = self

viewDidLoad的{​​{1}}中调用此行代码(我使用此名称,因为您没有提到控制器的名称)。在这里,我假设MyViewController是解除视图控制器的平移手势识别器(我快速检查LNPopupController)。

答案 1 :(得分:0)

此处LNPopupController的作者。 另一个答案是正确的。您需要实现手势识别器的委托并将其从交互中排除(或者做更复杂的事情)。

为此,请设置controller.popupContentView.popupInteractionGestureRecognizer.delegate属性。确保controller是您拨打presentPopupBarWithContentViewController:animated:completion:的实际控制器。