UItextInput Protocol

UItextInput是一个protocol,一般来说,文字处理的控件都要遵守这个协议。如UITextField,UITextView。下面介绍一些文字处理的基本概念。

  1. marked text
    对于多步骤(multistage)的文字输入来说,有一些文字是已经输入在文本框里,却还没有点击确认,这些文字叫做marked text。中文有,日文也比较常见。


    marked text
  2. UITextPositionUITextRange
    遵守UITextInput协议的类都要创建这两个类的子类。为什么不用NSRangeNSInteger呢。用来表示文字的位置和范围。
    如何转化NSRangeNSInteger?
  • UITextPosition to nsinteger
func offset(from: UITextPosition, to toPosition: UITextPosition) -> Int
  • UITextPosition to UITextRange
func textRange(from fromPosition: UITextPosition, to toPosition: UITextPosition) -> UITextRange?
  • nsinteger to UITextPosition
NSInteger startOffset = [tv offsetFromPosition:tv.beginningOfDocument toPosition:start];
  1. 坐标位置和UITextRange的转换
  • func characterRange(at point: CGPoint) -> UITextRange?
    根据坐标系中点的位置,返回一个包含了点所处的character的UITextRange。为啥不是一个UITextPosition,因为一个character会占据多个字符宽度,如emoji表情。
    如果那个位置没有文字,返回nil。
  • func closestPosition(to point: CGPoint) -> UITextPosition?
    根据点来找到距离这个点最近的而一个UITextPosition。如果这个点在第二行行位,而第二行只有一个字,可能定位到上面一行的最末。。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容