向 UITextView 添加手势会取消默认行为

Posted

技术标签:

【中文标题】向 UITextView 添加手势会取消默认行为【英文标题】:Adding gesture to UITextView cancels default behavior 【发布时间】:2015-04-01 14:32:58 【问题描述】:

我想为UITextView 添加一个点击手势,这样当我的保存对话框打开时,我可以通过点击UITextView 取消它。但是,当我这样做时,它会取消 textview 的正常单击行为。现在,当我在没有保存抽屉的情况下单击文本时,它什么也不做。点击确实使用回调方法正确触发,但它取消了 UITextView 的默认操作,(将光标放置在您点击的任何位置)。

// Add gesture to cancel saving
let singleCodeTextViewTap = UITapGestureRecognizer(target: self, action: Selector("codeTextViewTapped"))
singleCodeTextViewTap.numberOfTapsRequired = 1;
codeTextView.addGestureRecognizer(singleCodeTextViewTap)

func codeTextViewTapped() 
    if saveDrawerOut 
        moveFilenameBannerOffScreen()
        saveAsTextField.text = ""
    

如何在单击手势时启用 UITextView 的默认行为?

编辑 我尝试添加cancelsTouchesInView = false,但这似乎不起作用,尽管它似乎是正确的答案。所以现在我的代码如下所示:

singleCodeTextViewTap = UITapGestureRecognizer(target: self, action: Selector("codeTextViewTapped"))
singleCodeTextViewTap.numberOfTapsRequired = 1
singleCodeTextViewTap.cancelsTouchesInView = false
codeTextView.addGestureRecognizer(singleCodeTextViewTap)

【问题讨论】:

【参考方案1】:

singleCodeTextViewTapdelegate 设置为您的视图控制器,实现gestureRecognizerShouldBegin: 并在saveDrawerOuttrue 时返回false

【讨论】:

太棒了,我假设我需要为此采用某种协议?那会是哪种协议? 你想要UIGestureRecognizerDelegate 谢谢。我想是这样,但我想仔细检查一下。 这对我也不起作用。我将对问题进行编辑,但 gestureRecognizerShouldBegin 正在返回 true,并且该字段没有获得焦点。【参考方案2】:

您也可以将cancelsTouchesInView 设置为false。所以会是

singleCodeTextViewTap.cancelsTouchesInView = false

这将允许识别手势并将其转发到您的UITextView

【讨论】:

这似乎不起作用。我添加了它,当我点击时,textview 没有获得焦点或将插入符号移动到正确的位置。如果我删除手势,它当然可以工作【参考方案3】:

试试singleCodeTextViewTap.cancelsTouchesInView = false

它应该让多个手势识别器彼此和谐相处。

【讨论】:

以上是关于向 UITextView 添加手势会取消默认行为的主要内容,如果未能解决你的问题,请参考以下文章

如何将双击手势添加到 UITextView

使用向后滑动手势以交互方式取消选择选定单元格

在 UITextView 中的特定单词上添加点击手势识别器

如何在 iOS 7 上的 UINavigationController 中禁用向后滑动手势

如何取消对子 UIControl 的触摸?

滑动手势以隐藏 UITextView 内的键盘