【发布时间】:2019-06-13 14:55:31
【问题描述】:
我有一个 UITextView,我在其上附加了一个手势识别器,如下所示:
let testTapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(textTextViewTapped(gestureRecognizer:)))
testTapGestureRecognizer.cancelsTouchesInView = false
testTapGestureRecognizer.delaysTouchesBegan = false
testTapGestureRecognizer.delaysTouchesEnded = false
if textTextView != nil {
textTextView!.addGestureRecognizer(testTapGestureRecognizer)
}
上面提到的选择器如下:
@objc func textTextViewTapped(gestureRecognizer: UIGestureRecognizer) {
print("testTextViewTapped called.")
}
每次我点击 UITextView 时,我都可以在控制台上看到上面打印的消息。但是,键盘不再出现。
我发现 Apple 的文档在这里令人困惑: Here,上面写着
手势识别器不参与视图的响应器 链。
我将其解释为任何手势也会被发送到视图并向上发送,这是正常的。
稍后在同一页上,它说,
如果手势识别器识别出它的手势,剩余的触摸 因为视图被取消了。
这意味着如果一个附加的手势识别器能够将一个手势理解为它应该识别的那个,那么它将阻止它被传递到它所附加的视图。此外,它指定了 3 个应该能够阻止手势识别器这样做的属性。如上所示,我已在我的代码中将它们都设置为 false。
这里实际发生了什么,如何让 UITextView 正常解释触摸并能够使用手势识别器?
【问题讨论】:
-
为什么需要在文本视图中添加手势识别器?你想做什么?
-
完全不相关,但像
if x != nil { x!... }这样的代码在 Swift 中是一个糟糕的模式。你应该这样做:if let x = x { x... }. -
@rmaddy 我正在尝试清除一些占位符文本,然后用户才能开始输入。另外,同意模式不好。还在学习。感谢您的提示。
-
您是否尝试在
UITextView中复制UITextField的占位符行为?
标签: ios swift event-handling uitextview uigesturerecognizer