将UITapGestureRecognizer添加到UIPickerView的子视图中

时间:2017-09-05 08:31:33

标签: ios swift uipickerview subview uitapgesturerecognizer

我在UITapGesture上收到UILabel时遇到问题,这是UIPickerView的子视图。

let statusDisplayLabel = UILabel(frame: CGRect(x: 0,
                                               y: 0,
                                           width: <#width of UIPickerView #>,
                                          height: <# height of UIPickerView row #>))

statusDisplayLabel.isUserInteractionEnabled = true

let tapGesture = UITapGestureRecognizer(target: self,
                                        action: #selector(didTapStatusDisplayLabel(tap:)))

tapGesture.numberOfTapsRequired = 1
tapGesture.numberOfTouchesRequired = 1
statusDisplayLabel.addGestureRecognizer(tapGesture)



<# UIPickerView #>.addSubview(statusDisplayLabel)



@objc func didTapStatusDisplayLabel(tap: UITapGestureRecognizer){
                print("tapped")
}

UILabel显示UIPickerView上的statusDisplayLabel。但是&#34;轻拍&#34;邮件永远不会显示在控制台中,因为点击只是UIPickerView,而是移动UILabel。好像<p:remoteCommand name="RC_name" actionListener="#{TestBean.function}" /> <p:keyboard placeholder="Search" value="#{menu.searchValue}" layout="qwertyBasic" onkeyup="RC_name()" > <p:ajax event="click" listener="#{menu.search()}" update=":form:menuItems"/> </p:keyboard> 不在那里

我错过了什么?

2 个答案:

答案 0 :(得分:1)

尝试创建容器视图,将此UIPickerView添加到此视图中,并尝试将标签添加到选择器视图中,但不在容器视图中。

答案 1 :(得分:1)

检查以下

首先检查视图层次结构,是选择器视图顶部的标签

如果一切正确则

此处,缺少的部分仅为userInteractionEnabled

修改

您可以使用

调试视图层次结构

enter image description here

<强> EDIT2

您可以在func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView?的子类中实现UIView作为替代解决方案。如果您需要演示,那么我可以发布