无法让UITapGestureRecognizer识别控制器中的特定视图
问题描述:
我有一个菜单控制器,当它弹出时有一个集合视图。它的工作方式是,当用户在集合视图之外轻击时,它应该使菜单消失。当您在集合视图之外点按时,菜单会关闭,但当您在集合视图内点按时,该菜单也会关闭。我似乎无法让手势识别器在不在收集视图内时解散。我在这里和谷歌环顾四周,我还没有找到任何解决方案,但工程。下面是该处理抽头的功能的代码:无法让UITapGestureRecognizer识别控制器中的特定视图
@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布尔“我假设我检查这个错误,然后 – SamG 2014-10-09 15:35:19
'sender.locationInView(:这是通过以下完成menuCollectionView)将会返回一个'CGPoint',标记你的事件在'menuCollectionView'中的位置。你可以使用'CGRectContainsPoint(menuCollectionView.bounds,sender.locationInView(menuCollectionView))'。 – 2014-10-09 15:39:00
谢谢伊恩,这工作完美!我使用CGRectContainsPoint并直接过滤到集合视图。 :)被困在那两个星期了,谢谢! – SamG 2014-10-09 15:50:31