UITapGestureRecognizer斯威夫特不点火3

问题描述:

我已经在自定义UIViewController下面的代码:UITapGestureRecognizer斯威夫特不点火3

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

这不是正确的语法,我也不知道你的代码没有抛出错误,因为没有'UITapGestureRecogniser',只有'UITapGestureRecognizer'(带'z',而不是's') –

+0

道歉,这些都是现在az – Legatro

+0

,它更好。拼写非常重要。 –

只有在加载视图后,才需要指定自己。

var tapDismissTextField: UITapGestureRecognizer! 

并在viewDidLoad方法:

override func viewDidLoad() { 
    super.viewDidLoad() 
    tapDismissTextField = UITapGestureRecognizer(target: self, action: #selector(dismissTap)) 
    view.addGestureRecognizer(tapDismissTextField) 
} 

1.移动这一行:

let tapDismissTextField = UITapGestureRecognizer(target: self, action: #selector(dismissTap)) 

内部viewDidLoad(),因为self的方法/函数外/闭包返回一个(NSObject) ->() -> YourClass() (一个NSObject),而不是你的班级,实际上是view的拥有者。

2.我建议只留下一个鉴于GestureRecognizer

添加tapDismissTextField到viewdid负载

override func viewDidLoad() { 
    super.viewDidLoad() 
let tapDismissTextField = UITapGestureRecognizer(target: self, action: #selector(dismissTap)) 
    self.view.addGestureRecognizer(tapDismissTextField) 
    self.friendsView.addGestureRecognizer(tapDismissTextField) 
} 

这不是坐上UITextField工作的方式。我想你确实将setUserInteraction更改为false以防止UITextField行为。对?这就是为什么你的手势识别器不起作用。

所以,你需要给予,因为你看到我们现在处于两难境地。我们希望手势工作,我们不希望UITextField行为正常。我们需要知道你所取得的成就,以便更好地帮助你。

信息:

如果wonna显示自定义视图。例如UIPickerView设置 inputView属性为您的UITextField并删除您的手势 识别器。

解决方法:

您可以使用点击手势上UITextField上海华。并且,尝试 检测是否水龙头位于UITextField的框架内。 example

另一种解决方法:

尝试做的textFieldDidBeginEditting委托 方法你的行动。并做一些调整来禁用键盘。可能会将 inputView设置为零。

所以,我们需要确切地知道你想要达到什么样的目的,才能给你正确的解决方案。