UITextView字?jǐn)?shù)限制坑一天o(╯□╰)o

近期做個(gè)小小需求的時(shí)候碰到個(gè)小問題

起初以為字?jǐn)?shù)限制而已岩遗,一丟丟的小功能瘟栖,用textView:shouldChangeTextInRange:shouldChangeTextInRange:方法在輸入前判斷是否可變更值即可嗜价。

結(jié)果慢慢的一個(gè)又一個(gè)的坑就出現(xiàn)了。

坑一:

iOS9以下胆描,中文輸入的情況下指煎,點(diǎn)擊聯(lián)想字輸入是不會回調(diào)textView:shouldChangeTextInRange:shouldChangeTextInRange:這個(gè)方法的。

于是尝偎,聯(lián)想詞各種狂點(diǎn)饶火。 一小會輸入框滿滿全是~~~~

好吧。只能在textViewDidChange:方法內(nèi)判斷了致扯。

于是肤寝,唰唰唰在textViewDidChange:中加入三行代碼。

if(textView.text.length>NM_CARREPORT_TEXTLENGTH_MAX){

textView.text=[textView.text substringToIndex:NM_CARREPORT_TEXTLENGTH_MAX];

}

果斷run起來抖僵,開始噼里啪啦的狂敲屏幕自測【其實(shí)是抽空休息來著】鲤看。

“Bon…” crash了!KH骸义桂!

納尼?蹈垢! what are you 弄啥嘞慷吊?!2芴А溉瓶!我玩?zhèn)€textView,你要是crash在string相關(guān)的也就算了。 你特喵崩在array這種玩意上是鬧哪樣Q吣稹<埠辍!

惆悵了半天胞锰,灾锯,好吧,嗅榕,繼續(xù)填坑。吵聪。凌那。

坑二

crash是在textView截?cái)嗟臅r(shí)候出現(xiàn),唔吟逝,setMarkedText:selectedRange:是設(shè)置文字帽蝶,然后內(nèi)部進(jìn)行富文本的替換。

苦思冥想半天块攒,真真是不得其解励稳,為啥崩了。

直到囱井,突然發(fā)現(xiàn)在中文輸入下驹尼,連續(xù)輸入聲母中間會出現(xiàn)空格, 哇咔咔~~ 悟了 O(∩_∩)O哈哈哈~

趕緊驗(yàn)證一下自己的想法庞呕,果然新翎。。住练。

崩潰的原因在于地啰,假設(shè)要設(shè)置的上限是100個(gè)字符,當(dāng)輸入98個(gè)字符以后讲逛,連續(xù)輸入兩個(gè)聲母亏吝,此時(shí)系統(tǒng)自動在中間添加一個(gè)空格,進(jìn)入到textViewDidChanged:中盏混,textView.text的長度變成101蔚鸥,進(jìn)入到截?cái)嘧址倪壿嬛校氐糇詈笠粋€(gè)字符括饶,那么剩余100個(gè)字符的最后一個(gè)是系統(tǒng)自動增加的空格株茶。將整個(gè)串重新賦給textView.text的時(shí)候,系統(tǒng)無法識別空格(特喵的自己生的都不認(rèn)图焰。日了狗了了~~)启盛,于是就華麗麗的崩了。【經(jīng)檢驗(yàn)僵闯,若最后兩個(gè)字符輸入的是形如ch醬紫的卧抗,不會產(chǎn)生空格的連續(xù)字符,就不會有問題】鳖粟。

不過也對社裆,原本textView:shouldChangeTextInRange:shouldChangeTextInRange:就是用來過濾輸入文本的,既然進(jìn)入到textViewDidChange:中了向图,自然文本就是需要的泳秀,豈能容你隨意更改!【so榄攀。 機(jī)智的蘋果偷偷摸摸的在iOS9上更改了聯(lián)想文字輸入的邏輯嗜傅。也走textView:shouldChangeTextInRange:shouldChangeTextInRange:方法了】

問題找到了,接下來就是填坑了檩赢。

機(jī)智如我吕嘀,小小問題豈能難倒,

if(textView.text.length>NM_CARREPORT_TEXTLENGTH_MAX+1){

textView.text=[textView.text substringToIndex:NM_CARREPORT_TEXTLENGTH_MAX+1];

}

哈哈贞瞒。寶寶是不是好機(jī)智偶房,醬紫正常輸入就不會進(jìn)入到該方法了!因?yàn)樵趖extView:shouldChangeTextInRange:shouldChangeTextInRange:中已經(jīng)限制了军浆。 而聯(lián)想輸入棕洋,就讓你多輸入一個(gè)字嘛~ 反正一般人看不出來。

坑三

天真的我低估了我廠QA同學(xué)的敬業(yè)程度瘾敢,居然生生測出這BUG拍冠。 101個(gè)字和100個(gè)字~~~!4氐帧庆杜! 我說同學(xué),你要不要這么屌碟摆。晃财。。典蜕。 一個(gè)個(gè)去數(shù)你也是棒棒噠6鲜ⅰ!愉舔!

既然QA同學(xué)提出意見了钢猛。作為一名敬業(yè)的RD。必須fix掉靶汀命迈!

然而贩绕。。壶愤。 天知道怎么搞淑倾。。征椒。 機(jī)(bai)智(wu)如(liao)我(lai)娇哆,繼續(xù)翻API找去。

咦勃救?碍讨!markedTextRange 這個(gè)是什么鬼?蒙秒!

/* If text can be selected, it can be marked. Marked text represents provisionally

* inserted text that has yet to be confirmed by the user.It requires unique visual

* treatment in its display.If there is any marked text, the selection, whether a

* caret or an extended range, always resides witihin.

*

* Setting marked text either replaces the existing marked text or, if none is present,

* inserts it from the current selection. */

好吧垄开。直譯就是標(biāo)記文本,代表臨時(shí)的插入待用戶確認(rèn)的文本税肪,簡單來說,這個(gè)其實(shí)就是中文輸入時(shí)榜田,高亮的英文部分益兄。。中文輸入下并且有高亮的英文部分時(shí)箭券,這玩意兒就有值了净捅。

到這里,這坑就填一半了辩块。

if(textView.text.length > NM_CARREPORT_TEXTLENGTH_MAX && textView.markedTextRange == nil){

textView.text=[textView.text substringToIndex:NM_CARREPORT_TEXTLENGTH_MAX];

}

呼蛔六,搞定~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市废亭,隨后出現(xiàn)的幾起案子国章,更是在濱河造成了極大的恐慌,老刑警劉巖豆村,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件液兽,死亡現(xiàn)場離奇詭異,居然都是意外死亡掌动,警方通過查閱死者的電腦和手機(jī)四啰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來粗恢,“玉大人柑晒,你說我怎么就攤上這事【焐洌” “怎么了匙赞?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵佛掖,是天一觀的道長。 經(jīng)常有香客問我罚屋,道長苦囱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任脾猛,我火速辦了婚禮撕彤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘猛拴。我一直安慰自己羹铅,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布愉昆。 她就那樣靜靜地躺著职员,像睡著了一般。 火紅的嫁衣襯著肌膚如雪跛溉。 梳的紋絲不亂的頭發(fā)上焊切,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天,我揣著相機(jī)與錄音芳室,去河邊找鬼专肪。 笑死,一個(gè)胖子當(dāng)著我的面吹牛堪侯,可吹牛的內(nèi)容都是我干的嚎尤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼伍宦,長吁一口氣:“原來是場噩夢啊……” “哼芽死!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起次洼,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤关贵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后滓玖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坪哄,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年势篡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了翩肌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,505評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡禁悠,死狀恐怖念祭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情碍侦,我是刑警寧澤粱坤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布隶糕,位于F島的核電站,受9級特大地震影響站玄,放射性物質(zhì)發(fā)生泄漏枚驻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一株旷、第九天 我趴在偏房一處隱蔽的房頂上張望再登。 院中可真熱鬧,春花似錦晾剖、人聲如沸锉矢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沽损。三九已至,卻和暖如春循头,著一層夾襖步出監(jiān)牢的瞬間绵估,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工卡骂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留壹士,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓偿警,卻偏偏與公主長得像,于是被迫代替她去往敵國和親唯笙。 傳聞我的和親對象是個(gè)殘疾皇子螟蒸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內(nèi)容