我可以将 UITapGestureRecognizer 添加到我的控制器 self.view,但不能添加到任何自定义视图。为啥?
Posted
技术标签:
【中文标题】我可以将 UITapGestureRecognizer 添加到我的控制器 self.view,但不能添加到任何自定义视图。为啥?【英文标题】:I am able to add a UITapGestureRecognizer to my controllers self.view, but not to any custom views. Why?我可以将 UITapGestureRecognizer 添加到我的控制器 self.view,但不能添加到任何自定义视图。为什么? 【发布时间】:2016-02-11 02:05:53 【问题描述】:我的 ViewController 符合 UIGestureRecognizerDelegate。
我在这个 ViewController 中创建了各种视图。一个名为 circleView 的自定义视图和一个名为 testView 的常规 UIView。
我有以下从 viewDidLoad 调用的函数
func addTapGesturesOnNumberPadDisplay()
if tapGestureRecognizerNumberPadView == nil
tapGestureRecognizerNumberPadView = UITapGestureRecognizer(target: self, action: "handleTap:")
tapGestureRecognizerNumberPadView!.delegate = self
//self.circleView!.addGestureRecognizer(tapGestureRecognizerNumberPadView!) // 1
//self.testView!.addGestureRecognizer(tapGestureRecognizerNumberPadView!) // 2
self.view.addGestureRecognizer(tapGestureRecognizerNumberPadView!) // 3
此代码有效,第 3 行处于活动状态。我的func handleTap(sender: UITapGestureRecognizer)
被触发。但是,如果我注释掉第 3 行,并使第 1 行或第 2 行处于活动状态...handleTap:
永远不会被击中。
这是为什么?
【问题讨论】:
【参考方案1】:确保您的UIView's
将userInteractionEnabled
设置为true。在这里,层次结构也很重要。
如果您在circleView
和testView
的顶部有任何UIView
,那么它将不起作用。
除此之外,第三行有效,因为您将UITapGestureRecognizer
添加到UIViewController
的superview
。
【讨论】:
谢谢,我已经有一个星期没做这个了,我忘了我有一个 drawView 覆盖所有东西来绘制“手指尾随线”。所以 drawView 阻止了我的任何水龙头被识别。您可以将相同的gestureRezognizer 添加到多个视图吗?这似乎不起作用。 @chrisP 确保你永远不会犯这个错误。很高兴帮助:)以上是关于我可以将 UITapGestureRecognizer 添加到我的控制器 self.view,但不能添加到任何自定义视图。为啥?的主要内容,如果未能解决你的问题,请参考以下文章
Swift:我可以将 UIView 作为我可以创建/修改的参数传递吗?
我需要将一个 ifstream 传递给一个函数,这样我就可以将它添加到一个向量中
我可以将 Enum 扩展为 Enum.GetValues() 吗? [复制]