无法让UITapGestureRecognizer识别控制器中的特定视图

时间:2014-10-09 15:24:50

标签: ios swift uigesturerecognizer

我有一个菜单控制器,当它弹出时有一个集合视图。它的工作方式是当用户点击集合视图外部时,它应该使菜单解除。当您在集合视图外部点击时,菜单会消失,但当您在集合视图中点击时,它也会消失。我似乎无法让手势识别器只在不在集合视图中时才会被忽略。我在这里和谷歌一起环顾四周,但我还没有找到任何有效的解决方案。以下是处理点击的函数的代码:

    @IBAction func handleTap(sender: MenuTapGestureRecognizer)
    {
        if (sender.state == .Ended && sender.view == menuCollectionView)
        {
            NSLog("menuCollectionView")
        }
        else if (sender.state == .Ended && sender.view == mainView)
        {
            self.dismissViewControllerAnimated(true, completion: nil)
        }

    }

mainView是连接到最顶层视图的引用,menuCollectionView是对UICollectionView的引用。

1 个答案:

答案 0 :(得分:2)

我怀疑您只是将手势识别器附加到mainView。这很好,但您需要使用sender.locationInView(menuCollectionView)并检查该点是否在您的集合视图的范围内。这可以通过以下方式完成:

if (CGRectContainsPoint(menuCollectionView.bounds, sender.locationInView(menuCollectionView))) {
  // do stuff.
}