UITapGestureRecognizer在Swift 3中没有开火
我在自定义的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) }
没有“点击!” 线正在打印,所以手势识别器没有开火。 有什么可能出错?
在此控制器中的所有视图中,用户交互已启用。
这个视图控制器embedded在UINavigationController
如果有任何帮助的话。
只有在加载视图后才需要指定自己。
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.我build议只留下一个视图的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行为正常。 我们需要知道你所做的更好的帮助你。
信息:
如果你想显示自定义视图。 例如
UIPickerView
设置你的UITextField
的inputView
属性,并删除你的手势识别器。
解决方法:
您可以在
UITextField
超级视图上使用轻击手势。 并且,尝试检测水龙头是否在UITextField
的框架内。 例
另一个解决方法:
尝试对
textFieldDidBeginEditting
委托方法执行操作。 并做一些调整来禁用键盘。 可能是将inputView
设置为零。
所以,我们需要确切地知道你想要达到什么样的目的,才能给你正确的解决scheme。