何时调用 -[UITextInput selectionRectsForRange:]?

Posted

技术标签:

【中文标题】何时调用 -[UITextInput selectionRectsForRange:]?【英文标题】:When is -[UITextInput selectionRectsForRange:] called? 【发布时间】:2012-09-25 20:09:00 【问题描述】:

我有一个带有实现 UITextInput 协议的自定义文本编辑器的应用程序。在 ios 6 中,Apple 向协议中添加了一种新的必需方法:

- (NSArray *)selectionRectsForRange:(UITextRange *)range

我已经实现了这个,但我似乎找不到触发它的方法。至少在我的应用程序的工作方式上,它似乎永远不会被文本系统调用。有谁知道它是干什么用的?

【问题讨论】:

从文档来看,返回值为An array of UITextSelectionRect objects that encompass the selection. 进一步阅读UITextSelectionRect的文档:如果您正在实现自定义文本输入视图,您可以继承并使用您的自定义类来返回选择-相关信息。子类化时,您应该覆盖并重新实现所有属性。在您的自定义实现中,不要调用 super。 我可能已经说明了上述显而易见的内容以及您可能已经阅读过的内容,但在我看来,这是有关文本选择范围的信息,并将有关所选内容的自定义信息返回给任何要求它的人。 是的,但我的问题是何时调用。协议中的所有方法都由文本系统调用,用于键入和自动更正等操作。我想知道它什么时候会调用这个方法。 您是否尝试过选择文本并拖动以选择更多/更少的文本?添加一些日志,看看它是否在那里调用。 【参考方案1】:

此方法仅由 UITextView 的子类使用。这是为您提供系统选择和放大镜的唯一方法。这是我在 WWDC 上被告知的。

我也在开发自己的 DTRichTextEditor,不过我还是实现了它,也许有一天我们也会为我们自己的 UIViews 获得选择/放大镜,这些 UIViews 不是从 UITextView 派生的。

【讨论】:

当启用 VoiceOver 时,该方法实际上确实被调用用于自定义视图。然后将结果用于突出显示用户在视图中拖动时说出的文本行(在 iOS 8 上测试,不确定 iOS 6 和 7 上的行为如何)。

以上是关于何时调用 -[UITextInput selectionRectsForRange:]?的主要内容,如果未能解决你的问题,请参考以下文章

何时使用 socket.io ?以及何时使用简单的 Http 调用? [复制]

何时调用 viewmodel onCleared

何时调用 viewDidLoad?

何时调用 addChildViewController

PHPhotoLibraryChangeObserver photoLibraryDidChange: 何时调用?

何时在 Blazor 组件中调用 StateHasChanged()