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】:

UITextInputDelegateselectionDidChange(_:) 在用户完成更改选择(从选择手柄上抬起手指)时被调用。在UITextView 上,将您的班级设置为inputDelegate。这适用于只读文本视图,而不仅仅是可编辑的。

【讨论】:

我将 selectionDidChange 与 UITextView 一起使用,每次我突出显示一个额外的字符而不是在文本块的末尾时,它似乎都会被调用。那么它与 textViewDidChangeSelection 有什么不同呢?【参考方案3】:

我认为您必须继承 UITextView 并实现 touchesEnded:withEvent: 才能知道用户何时停止更改选择。

【讨论】:

以上是关于UITextView 确实完成了更改选择的主要内容,如果未能解决你的问题,请参考以下文章

更改段落样式后重绘 UITextView 选择

在启用滚动的堆栈视图中扩展 UITextView

UITextView insertText 调用 shouldChangeTextInRange: replacementText:

UITextView 阻止苹果的自动更改

使用自动布局问题在 UIScrollView 中调整 UITextView 的大小

调整表格视图单元格以显示 UITextView 和 UIWebView