UITextView/UItextField的限制输入文字个数 之一

初学者笔记:


为了防止其他初学者跟我一下,一边学一边谷歌,百度的同学们,少走弯路。对于限制输入个数,这个方法是网上暂时没有的思想,自己想出来。之前2天前写过,单误操作给删除了。如有帮助请仔细看看,自认为挺好的。。。。。

比较:UITextView以及UITextField的限制方法都是一样的。不一样的是

UITextView的代理方法中直接有:

//内容发生改变编辑

- (void)textViewDidChange:(UITextView*)textView;

然而UITextField没有,但是UITextField的代理方法最下面有这样一段:

UIKIT_EXTERNNSString* const UITextFieldTextDidChangeNotification;

当时,我看到这个感觉跟上面的差不多,都是模式是TextDidChange。

查了一下Notification的意思,通知,所及简而言之:

[NSNotificationCenter defaultCenter]中添加对于UITextField的通知事件

所以,这两个控件都是相同的,我就拿UITextView举例。开始步入正轨。。。。。

分析:

//内容将要发生改变的时候会走的函数 其中的text是变化的值

- (BOOL)textView:(UITextView*)textView shouldChangeTextInRange:(NSRange)range

replacementText:(NSString*)text;

函数的返回值 YES 以及 NO;YES是允许修改textview的值, NO是不允许修改textview的值

//内容发生改变的时候会走的函数

- (void)textViewDidChange:(UITextView*)textView;

我们会用到这两个函数,知道大概的什么时候会调用,那么就来分析一下都有什么情况。

按照原始的认知:英文占一个字符,中文占两个字符。

情况一:

1)全部英文    2)全部中文   3)英文以及中文的结合

情况二:

因为刚接触ios也就有认识来一样东西,叫做表情,类似😄这样的东西。所以就会出现英文以及中文的结合,加上表情。

NSData*data = [textView.text dataUsingEncoding:NSNonLossyASCIIStringEncoding];

NSString*goodValue =[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

NSLog(@"gv = %@,len = %lu",goodValue,(unsignedlong)goodValue.length);

data = [goodValue dataUsingEncoding:NSUTF8StringEncoding];

goodValue = [[NSString alloc]initWithData:data encoding:NSNonLossyASCIIStringEncoding];

NSLog(@"gv = %@,len = %lu",goodValue,(unsignedlong)goodValue.length);

表情-截图

这样可以看出来占用的是12字符,同样的处理汉字。

汉字-截图

英文就不用说了,就是占用1。

分析到这,当用户输入的时候都会有什么情况,1)手动输入     2)复制粘贴   3)自动输入(自动输入:就是中文中的拼音联想)

因为全是英文的情况好理解,所以先从中英文一起开写。

总体分析:

1.当输入拼音的情况下,会有高亮(拼音出现),会走shouldChangeTextInRange,所以要判断是不是拼音,还是正常的输入。

提供的方法如下:

判断高亮的方法-截图

图解:这两个值如果不是nil是高亮状态,但是有两种状态:第一种,将要进入高亮状态,但是没进入,第一次点中文输入法的按键两个值时nil。第二种,是直接点击拼音联想的文字,以及输入表情符号😊的时候,两个值是nil。

是判断是否有高亮的出现,点击输入文字的时候是不走shouldChangeTextInRange这个函数的。而是走textViewDidChange。

所以在textViewDidChange判断字符串的长度,以及_及时的修改字符串的长度,

我的做法是:

判断长度以及修改字符串-截图

图解:判断了selectRange以及pos的值是否为nil,上文说过这是区分高亮的,在else中的贩判断中的if语句中JudgementString的函数中时判断输入的字符串是否超过限定的字符,如果没超过,直接return不管它。让他随便的添加。如果超了,那就截取字符串。

2.核心内容:

在上面的1种最后是判断是否超过限制字符。因为有英文,中文,表情的存在,所以判断会有3个分支如图:

核心判断模块-截图

图解:首先是判断是否中文,当这样判断遇到表情的时候,会遇到Cstring=NULL的情况,所以知识需要单独拿出来判断。又因为表情最少时一个以及两个中文字符大小,所以是需要重新改变Range的。因此,分别的以英文,中文表情判断,必须是在加上增加量再与MAX判断,返还刚要超过临界点的上一个值的位置,到时候是需要截取字符串的,如果不记录上一个,那么,就可能出现截取半个表情,出现半A的情况,删除会出现问题。

本文的两个情况 理解:

1)高亮但是没输入上去

2)输入上TextView上    在这两方面做判断

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

推荐阅读更多精彩内容