UItextInput Protocol

UItextInput是一個(gè)protocol,一般來說,文字處理的控件都要遵守這個(gè)協(xié)議。如UITextField,UITextView。下面介紹一些文字處理的基本概念。

  1. marked text
    對(duì)于多步驟(multistage)的文字輸入來說,有一些文字是已經(jīng)輸入在文本框里,卻還沒有點(diǎn)擊確認(rèn),這些文字叫做marked text。中文有,日文也比較常見。


    marked text
  2. UITextPositionUITextRange
    遵守UITextInput協(xié)議的類都要?jiǎng)?chuàng)建這兩個(gè)類的子類。為什么不用NSRangeNSInteger呢。用來表示文字的位置和范圍。
    如何轉(zhuǎn)化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. 坐標(biāo)位置和UITextRange的轉(zhuǎn)換
  • func characterRange(at point: CGPoint) -> UITextRange?
    根據(jù)坐標(biāo)系中點(diǎn)的位置,返回一個(gè)包含了點(diǎn)所處的character的UITextRange。為啥不是一個(gè)UITextPosition,因?yàn)橐粋€(gè)character會(huì)占據(jù)多個(gè)字符寬度,如emoji表情。
    如果那個(gè)位置沒有文字,返回nil。
  • func closestPosition(to point: CGPoint) -> UITextPosition?
    根據(jù)點(diǎn)來找到距離這個(gè)點(diǎn)最近的而一個(gè)UITextPosition。如果這個(gè)點(diǎn)在第二行行位,而第二行只有一個(gè)字,可能定位到上面一行的最末。。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容