我在自定义UIViewController
中有以下代码:
let tapDismissTextField = UITapGestureRecognizer(target: self, action: #selector(dismissTap))
func dismissTap() {
print("Tap!")
}
override func viewDidLoad() {
super.viewDidLoad()
self.view.addGestureRecognizer(tapDismissTextField)
self.friendsView.addGestureRecognizer(tapDismissTextField)
}
没有“点击!”正在打印线条,因此手势识别器不会触发。可能出现什么问题?
启用的用户交互是 true ,涵盖此控制器中的所有视图。
如果有任何帮助,此视图控制器将嵌入UINavigationController
。
答案 0 :(得分:2)
1。移动此行:
let tapDismissTextField = UITapGestureRecognizer(target: self, action: #selector(dismissTap))
在viewDidLoad()
内,因为在methods / function / closures之外的self
返回(NSObject) -> () -> YourClass()
(一个NSObject),而不是你的类,它实际上是view
的所有者
2. 我建议只留下GestureRecognizer
答案 1 :(得分:1)
只有在加载视图后才需要指定self。
var tapDismissTextField: UITapGestureRecognizer!
并在viewDidLoad方法中:
override func viewDidLoad() {
super.viewDidLoad()
tapDismissTextField = UITapGestureRecognizer(target: self, action: #selector(dismissTap))
view.addGestureRecognizer(tapDismissTextField)
}
答案 2 :(得分:1)
将tapDismissTextField添加到viewdid load
中override func viewDidLoad() {
super.viewDidLoad()
let tapDismissTextField = UITapGestureRecognizer(target: self, action: #selector(dismissTap))
self.view.addGestureRecognizer(tapDismissTextField)
self.friendsView.addGestureRecognizer(tapDismissTextField)
}
答案 3 :(得分:0)
这不是在UITextField
上采取行动的正确方法。我猜您确实将setUserInteraction
更改为false
以阻止UITextField
行为。对?这就是为什么你的手势识别器无法正常工作。
所以,你需要给出你现在正处于两难的困境。我们希望手势能够工作,我们不希望UITextField表现得很正常。我们需要知道你想要达到的目标,以便更好地帮助你。
<强>的信息:强>
如果您想显示自定义视图。例如
UIPickerView
设置inputView
的{{1}}属性并移除您的手势 识别器。
解决方法:
您可以在
UITextField
超级视图上使用点按手势。并且,尝试 检测点击是否在UITextField
的帧内。 example
另一种解决方法:
尝试对
UITextField
代理人采取行动 方法。并做一些调整来禁用键盘。可能正在设置textFieldDidBeginEditting
为零。
因此,我们需要准确了解您希望实现的目标,以便为您提供正确的解决方案。