UITextView字数限制坑一天o(╯□╰)o

近期做个小小需求的时候碰到个小问题

起初以为字数限制而已,一丢丢的小功能,用textView:shouldChangeTextInRange:shouldChangeTextInRange:方法在输入前判断是否可变更值即可。

结果慢慢的一个又一个的坑就出现了。

坑一:

iOS9以下,中文输入的情况下,点击联想字输入是不会回调textView:shouldChangeTextInRange:shouldChangeTextInRange:这个方法的。

于是,联想词各种狂点。 一小会输入框满满全是~~~~

好吧。只能在textViewDidChange:方法内判断了。

于是,唰唰唰在textViewDidChange:中加入三行代码。

if(textView.text.length>NM_CARREPORT_TEXTLENGTH_MAX){

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

}

果断run起来,开始噼里啪啦的狂敲屏幕自测【其实是抽空休息来着】。

“Bon…” crash了!!!

纳尼?! what are you 弄啥嘞?!!!我玩个textView,你要是crash在string相关的也就算了。 你特喵崩在array这种玩意上是闹哪样!!!

惆怅了半天,,好吧,,继续填坑。。。

坑二

crash是在textView截断的时候出现,唔,setMarkedText:selectedRange:是设置文字,然后内部进行富文本的替换。

苦思冥想半天,真真是不得其解,为啥崩了。

直到,突然发现在中文输入下,连续输入声母中间会出现空格, 哇咔咔~~ 悟了 O(∩_∩)O哈哈哈~

赶紧验证一下自己的想法,果然。。。

崩溃的原因在于,假设要设置的上限是100个字符,当输入98个字符以后,连续输入两个声母,此时系统自动在中间添加一个空格,进入到textViewDidChanged:中,textView.text的长度变成101,进入到截断字符串的逻辑中,截掉最后一个字符,那么剩余100个字符的最后一个是系统自动增加的空格。将整个串重新赋给textView.text的时候,系统无法识别空格(特喵的自己生的都不认。日了狗了了~~),于是就华丽丽的崩了。【经检验,若最后两个字符输入的是形如ch酱紫的,不会产生空格的连续字符,就不会有问题】。

不过也对,原本textView:shouldChangeTextInRange:shouldChangeTextInRange:就是用来过滤输入文本的,既然进入到textViewDidChange:中了,自然文本就是需要的,岂能容你随意更改!【so。 机智的苹果偷偷摸摸的在iOS9上更改了联想文字输入的逻辑。也走textView:shouldChangeTextInRange:shouldChangeTextInRange:方法了】

问题找到了,接下来就是填坑了。

机智如我,小小问题岂能难倒,

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

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

}

哈哈。宝宝是不是好机智,酱紫正常输入就不会进入到该方法了!因为在textView:shouldChangeTextInRange:shouldChangeTextInRange:中已经限制了。 而联想输入,就让你多输入一个字嘛~ 反正一般人看不出来。

坑三

天真的我低估了我厂QA同学的敬业程度,居然生生测出这BUG。 101个字和100个字~~~!!! 我说同学,你要不要这么屌。。。。 一个个去数你也是棒棒哒!!!

既然QA同学提出意见了。作为一名敬业的RD。必须fix掉啊!

然而。。。 天知道怎么搞。。。 机(bai)智(wu)如(liao)我(lai),继续翻API找去。

咦?!markedTextRange 这个是什么鬼?!

/* 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. */

好吧。直译就是标记文本,代表临时的插入待用户确认的文本,简单来说,这个其实就是中文输入时,高亮的英文部分。。中文输入下并且有高亮的英文部分时,这玩意儿就有值了。

到这里,这坑就填一半了。

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

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

}

呼,搞定~~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,802评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,109评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,683评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,458评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,452评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,505评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,901评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,550评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,763评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,556评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,629评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,330评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,898评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,897评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,140评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,807评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,339评论 2 342

推荐阅读更多精彩内容