处理iOS键盘上的标记文本

Jas*_*Lee 6 objective-c uitextview uitextviewdelegate ios uitextinput

根据文件,

标记文本是多级文本输入的一部分,表示用户尚未确认的临时插入文本.它以独特的方式设计.标记文本的范围始终包含一系列选定文本,可能是一系列字符或插入符号.

管理键盘一章中,图5-2显示了标记文本的内容:

在此输入图像描述

给定第4和第6张图像,键盘上的顶栏显示标记文本,如"修","修改","修身"等.

我很困惑的是HOWTO:

  • 检测用户点击标记的文本.它是替换所选文本,或者只是插入标记文本.
  • 在栏上显示自定义文字.例如,[textView showMarkedText:@"hello" atIndex:0].

谢谢.

liu*_*ong 6

实际上,您对“标记文本”和“候选文本”有点困惑。

\n\n

以中文手写键盘为例,音符上的“\xe4\xbf\xae”符号被称为“标记文本”,具有独特的风格。而键盘上的“\xe4\xbf\xae”、“\xe4\xbf\xae\xe6\x94\xb9”、“\xe4\xbf\xae\xe8\xba\xab”...称它们为“候选”(如果您检查键盘的视图层次结构,它们放置的栏被命名为“候选栏”)。

\n\n

有一些接口可以对标记的文本进行操作。您可以查看已确认的UITextInput协议。和UITextViewUITextField-setMarkedText:selectedRange:-unmarkText会做一些棘手的事情。

\n\n

没有公共 API 可以在候选栏上进行操作,并且如何检测对其的点击也没有记录。但是,如果您正在使用(或对应的方法),您可以通过在协议中实现-textView:shouldChangeTextInRange:replacementText:和来间接检测到这一点-textViewDidChange:UITextViewDelegateUITextViewUITextField)。

\n\n

PS:至少据我所知,中文键盘有一个例外,这有点像一个错误。当您点击中文键盘的候选栏时,您点击的文本将应用到您的UITextView( 或UITextField) 上,而不会-textView:shouldChangeTextInRange:replacementText:触发。但-textViewDidChange:最终会被调用。

\n\n

希望它能有所帮助。

\n