UITextView 确实完成了更改选择
Posted
技术标签:
【中文标题】UITextView 确实完成了更改选择【英文标题】:UITextView did finish change selection 【发布时间】:2014-02-04 19:20:05 【问题描述】:我想在用户完成 UITextView 中的更改选择时捕获事件。方法textViewDidChangeSelection:
在用户拉动光标时调用了几次。我尝试使用touchesEnded:withEvent:
,但它没有调用。尝试添加平移手势,但平移处理程序不调用。
【问题讨论】:
请解释为什么你不能使用textViewDidChangeSelection:
。
每次选择更改时,我都会向服务器发送请求。在这种情况下,我收到了很多请求。我可以延迟发送请求,这是 B 计划 =)
在最后一次textViewDidChangeSelection:
通话后等待一段时间可能是个好主意。
是的,但我认为如果我能毫不拖延地做会好得多。响应在 0.1 秒内,非常快。随着延迟,用户将等待十倍于需要的时间。而且我每天的请求有限制。无论如何,最好不要拖延。
@Gralex 你找到解决方案了吗?
【参考方案1】:
我知道现在回答为时已晚。
尽管..
您可以在textViewDidChangeSelection:
中使用selectedRange
并检查selectedRange.length
是否大于零。这将确认用户选择了某些内容,而不仅仅是移动了光标。
【讨论】:
回答永远不会太晚! *** 也旨在成为未来搜索的存档参考,谢谢! @AlbertRenshaw 正是兄弟,我也遇到了同样的情况。 我后来可以找到解决方案并发布它。 你误会我了。我想在用户完成选择范围时处理。每次用户移动开始范围光标事件时都会被调用。每次length
> 0。当用户触摸他的手指时,我需要以某种方式处理。【参考方案2】:
UITextInputDelegate
的selectionDidChange(_:)
在用户完成更改选择(从选择手柄上抬起手指)时被调用。在UITextView
上,将您的班级设置为inputDelegate
。这适用于只读文本视图,而不仅仅是可编辑的。
【讨论】:
我将 selectionDidChange 与 UITextView 一起使用,每次我突出显示一个额外的字符而不是在文本块的末尾时,它似乎都会被调用。那么它与 textViewDidChangeSelection 有什么不同呢?【参考方案3】:我认为您必须继承 UITextView
并实现 touchesEnded:withEvent:
才能知道用户何时停止更改选择。
【讨论】:
以上是关于UITextView 确实完成了更改选择的主要内容,如果未能解决你的问题,请参考以下文章
UITextView insertText 调用 shouldChangeTextInRange: replacementText: