向 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】:将singleCodeTextViewTap
的delegate
设置为您的视图控制器,实现gestureRecognizerShouldBegin:
并在saveDrawerOut
为true
时返回false
。
【讨论】:
太棒了,我假设我需要为此采用某种协议?那会是哪种协议? 你想要UIGestureRecognizerDelegate
。
谢谢。我想是这样,但我想仔细检查一下。
这对我也不起作用。我将对问题进行编辑,但 gestureRecognizerShouldBegin
正在返回 true,并且该字段没有获得焦点。【参考方案2】:
您也可以将cancelsTouchesInView
设置为false
。所以会是
singleCodeTextViewTap.cancelsTouchesInView = false
这将允许识别手势并将其转发到您的UITextView
【讨论】:
这似乎不起作用。我添加了它,当我点击时,textview 没有获得焦点或将插入符号移动到正确的位置。如果我删除手势,它当然可以工作【参考方案3】:试试singleCodeTextViewTap.cancelsTouchesInView = false
它应该让多个手势识别器彼此和谐相处。
【讨论】:
以上是关于向 UITextView 添加手势会取消默认行为的主要内容,如果未能解决你的问题,请参考以下文章