UItextInput是一个protocol,一般来说,文字处理的控件都要遵守这个协议。如UITextField
,UITextView
。下面介绍一些文字处理的基本概念。
UITextPosition
和UITextRange
遵守UITextInput
协议的类都要创建这两个类的子类。为什么不用NSRange
和NSInteger
呢。用来表示文字的位置和范围。
如何转化NSRange
和NSInteger
?
func offset(from: UITextPosition, to toPosition: UITextPosition) -> Int
func textRange(from fromPosition: UITextPosition, to toPosition: UITextPosition) -> UITextRange?
NSInteger startOffset = [tv offsetFromPosition:tv.beginningOfDocument toPosition:start];
坐标位置和UITextRange的转换
func characterRange(at point: CGPoint) -> UITextRange?
UITextRange
。为啥不是一个UITextPosition
,因为一个character会占据多个字符宽度,如emoji表情。func closestPosition(to point: CGPoint) -> UITextPosition?
UITextPosition
。如果这个点在第二行行位,而第二行只有一个字,可能定位到上面一行的最末。。原文:http://www.cnblogs.com/huahuahu/p/UItextInputProtocol.html