UITapGestureRecognizer没有在Swift 3中触发

时间:2017-02-26 12:25:55

标签: ios swift uigesturerecognizer

我在自定义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

4 个答案:

答案 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为零。

因此,我们需要准确了解您希望实现的目标,以便为您提供正确的解决方案。