UITapGestureRecognizer 未在 Swift 3 中触发
Posted
技术标签:
【中文标题】UITapGestureRecognizer 未在 Swift 3 中触发【英文标题】:UITapGestureRecognizer not firing in Swift 3 【发布时间】:2017-02-26 12:25:54 【问题描述】:我在自定义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)
没有“点击!”正在打印线条,因此手势识别器没有触发。可能出了什么问题?
User Interaction Enabled 在此控制器中的所有视图中 true。
如果有帮助的话,这个视图控制器会嵌入到 UINavigationController
中。
【问题讨论】:
这不是正确的语法,我也不知道你的代码怎么没有抛出错误,因为没有UITapGestureRecogniser
,只有UITapGestureRecognizer
(用z
,而不是@ 987654327@)
抱歉,这些都是带z的
现在,好多了。拼写真的很重要。
有趣,好吧。我只用手势识别器留下了 self.view,但什么都没有打印。问题可能出在这段代码之外吗?
现在发布答案
【参考方案1】:
1.移动这一行:
let tapDismissTextField = UITapGestureRecognizer(target: self, action: #selector(dismissTap))
在viewDidLoad()
内部,因为在方法/函数/闭包之外的self
返回一个(NSObject) -> () -> YourClass()
(一个NSObject),而不是你的类,它实际上是view
的所有者。
2.我建议只留下一个视图GestureRecognizer
【讨论】:
【参考方案2】:只有在加载视图后才需要分配 self。
var tapDismissTextField: UITapGestureRecognizer!
在你的 viewDidLoad 方法中:
override func viewDidLoad()
super.viewDidLoad()
tapDismissTextField = UITapGestureRecognizer(target: self, action: #selector(dismissTap))
view.addGestureRecognizer(tapDismissTextField)
【讨论】:
【参考方案3】:将 tapDismissTextField 添加到 viewdid 加载中
override func viewDidLoad()
super.viewDidLoad()
let tapDismissTextField = UITapGestureRecognizer(target: self, action: #selector(dismissTap))
self.view.addGestureRecognizer(tapDismissTextField)
self.friendsView.addGestureRecognizer(tapDismissTextField)
【讨论】:
【参考方案4】:这不是在UITextField
上获取操作的正确方法。我猜您确实将 setUserInteraction
更改为 false
以防止 UITextField
行为。对?这就是你的手势识别器不起作用的原因。
因此,您需要付出,因为我们现在处于两难境地。我们希望手势起作用,我们不希望 UITextField 表现正常。我们需要知道您将实现什么才能更好地帮助您。
信息:
如果您不想显示自定义视图。例如
UIPickerView
设置inputView
属性为您的UITextField
并删除您的手势 识别器。
解决方法:
您可以在
UITextField
superview 上使用点击手势。并且,尝试 检测水龙头是否在UITextField
的框架内。 example
另一种解决方法:
尝试对
textFieldDidBeginEditting
代表执行您的操作 方法。并进行一些调整以禁用键盘。可能正在设置inputView
为零。
因此,我们需要准确了解您想要达到的目标,以便为您提供合适的解决方案。
【讨论】:
以上是关于UITapGestureRecognizer 未在 Swift 3 中触发的主要内容,如果未能解决你的问题,请参考以下文章
UITapGestureRecognizer 不适用于 UIView 动画
使用 UITapGestureRecognizer 无法识别的选择器
UIlabel 中的 UITapGestureRecognizer 错误