Ios Can';无法让UITapGestureRecognitor识别控制器中的特定视图

Ios Can';无法让UITapGestureRecognitor识别控制器中的特定视图,ios,swift,uigesturerecognizer,Ios,Swift,Uigesturerecognizer,我有一个菜单控制器,当它弹出时有一个集合视图。它的工作方式是,当用户在集合视图之外点击时,它应该使菜单关闭。单击集合视图外部时,菜单将关闭,但单击集合视图内部时,菜单也将关闭。我似乎无法让手势识别器仅在不在集合视图中时才关闭。我环顾了一下这里和谷歌,还没有找到任何有效的解决方案。以下是处理抽头的函数的代码: @IBAction func handleTap(sender: MenuTapGestureRecognizer) { if (sender.state =

我有一个菜单控制器,当它弹出时有一个集合视图。它的工作方式是,当用户在集合视图之外点击时,它应该使菜单关闭。单击集合视图外部时,菜单将关闭,但单击集合视图内部时,菜单也将关闭。我似乎无法让手势识别器仅在不在集合视图中时才关闭。我环顾了一下这里和谷歌,还没有找到任何有效的解决方案。以下是处理抽头的函数的代码:

    @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的引用。

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

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

我试着用它来做一个检查,我一直得到“CGPoint不能转换为ObjC Bool”我假设我检查不正确,然后
sender.locationInView(menuCollectionView)
将返回一个
CGPoint
,它在
menuCollectionView
中标记事件的位置。您可以使用
CGRectContainsPoint(menuCollectionView.bounds,sender.locationInView(menuCollectionView))
。感谢您的帮助,它工作得很好!我使用了CGRectContainsPoint,它直接过滤到集合视图。:)我已经坚持了两个星期了,谢谢!