UITextField && UITextView 限制限制字数做法

有许多时候都有这种需求,那就是限制字数操作。

在没有一套好的方法之前,比如textView的限制方法就是利用代理方法

-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text

{

if (textView.text.length  >= number) {

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

return NO;

}else {

return YES;

}

}

可这种普遍的方式绝逼有问题,单纯的英文还好说。可是你在使用拼音就会出现问题。那就是后面的时候你想输入发现都输入不上去。但是根据连锁出来的词语却还能直接点上去。

所以,不能让用户连拼音都打不出来,就只能限制输入成功之后的字数咯。

故,那就在每当text改变时去判断字数就可以了。

textView 有代理方法 - (void)textViewDidChange:(UITextView
*)textView可以实时的监听text内容变化,而 textFiled 却没有,但是 @interface UITextField :
UIControl <UITextInput,
NSCoding>

所以可以添加监听

[valueField addTarget:self
action:@selector(changeText:)
forControlEvents:UIControlEventEditingChanged];

所以不管是代理方法还是自己实现的监听(textView代理实现大同小异),内容就可以去判断字数了:

- (void)changeText:(UITextField *)sender

{

bool isChinese;//判断当前输入法是否是中文

if ([[[UITextInputMode
currentInputMode] primaryLanguage]
isEqualToString: @"en-US"]) {

isChinese =
false;

}

else

{

isChinese =
true;

}

NSInteger number =
0; //需要限制的字数

if (sender.tag ==
30000) {

number =
5;

}else
if (sender.tag ==
30001)

{

number =
11;

}

if(sender.tag ==
30000) {

// number位

NSString *str = [[sender
text] stringByReplacingOccurrencesOfString:@"?"
withString:@""];

if (isChinese) { //中文输入法下

UITextRange *selectedRange = [sender
markedTextRange];

//获取高亮部分

UITextPosition *position = [sender
positionFromPosition:selectedRange.start
offset:0];

//
没有高亮选择的字,则对已输入的文字进行字数统计和限制

if (!position) {

NSLog(@"汉字");

if ( str.length>=number +
1) {

NSString *strNew = [NSString
stringWithString:str];

[sender
setText:[strNew substringToIndex:number]];

}

}

else

{

NSLog(@"输入的英文还没有转化为汉字的状态");

}

}else{

NSLog(@"str=%@;
本次长度=%lu",str,(unsigned
long)[str length]);

if ([str length]>=number +
1) {

NSString *strNew = [NSString
stringWithString:str];

[sender
setText:[strNew substringToIndex:number]];

}

}

}

}

时间: 2024-10-29 10:45:40

UITextField && UITextView 限制限制字数做法的相关文章

用视图上移解决UITextField/UITextView被键盘遮盖问题

先看看UILabel/UITextField/UITextView的区别: UILabel 显示的文本只读,无法编辑,可以根据文字个数自动换行:UITextField 可编辑本文,但是无法换行,只能在一行显示:当点击键盘上的return时会收到一个事件做一些事情.UITextView 可编辑文本,提供换行功能. 解决UITextField/UITextView被键盘遮盖问题可以主要参考https://gist.github.com/ruandao/9429305 先记着,有时间做一些整理 参考链

UITextField,UITextView,UILabel 根据内容来计算高度

在开发的过程中,常常遇到根据内容来决定控件的高度的情况,常见的就是UITextField,UITextView,UILabel这三个控件,下面一UITextView 为例来说明一下: 首先新新建一个textView. 设施text,font UITextView *textView = [[UITextView alloc] init]; textView.text = @"2015-01-19 14:07:47.290 MicroPort[3047:103721] -[PPRevealSide

UITextField限制输入中文字数

前面写一了篇,UITextField Category来限制输入的字数,是有个Bug的,要输入中文时会crash.现在修改 了下,代码如下 .h文件 #import <UIKit/UIKit.h> @interface UITextField (LimitLength) /** * 使用时只要调用此方法,加上一个长度(int),就可以实现了字数限制,汉字不可以 * * @param length */ - (void)limitTextLength:(int)length; /** * uit

IOS UITextField &amp;UITextView

UITextField 限制textField长度 曾经,以为输入框只是输入字符的,但真的认真为一个登陆界面输入框而改了六七次以后,发现好烦人啊,先谢谢测试的不厌其烦,不杀之恩,不想再用IOS的输入框就是这样子的来敷衍产品汪,认真思考了一下,还真有点不好搞啊,于是呼,找了点测试过能用的代码,贴这里给我们这些菜鸟用,万恶的复制啊,你ctrl v一下,不带走一片云彩. [[NSNotificationCenter defaultCenter]addObserver:self selector:@se

详释(常见UITextView 输入之字数限制)之一---固定长度

好久没有写文章了,今天上来写写,发现增多了markDown编辑器.挺不错,后续研究一下,今天暂写文章先.好了,不废话. 如题,相信大家看到这个标题都不想看文章了,这有什么好说的,网上一搜一大把.好吧,自认为是一搜一大把的跳过,有兴趣的就看完...... 对于限制UITextView输入的字符数.相信大家在网上见得最多的是实现UITextViewDelegate - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSR

OC中限制UITextView的最大字数的实现

一.属性 //自定义的textview @property (weak, nonatomic) IBOutlet UITextView *textview; //添加一个bool类型的属性 @property (nonatomic, assign) BOOL isNameTextFieldEnbable; 二.监听通知.并初始化BOOL值 //UITextView的监听方法 [[NSNotificationCenter defaultCenter] addObserver:self select

UITextView 限制输入字数

尊重原创  http://blog.csdn.net/fengsh998/article/details/45421107 对于限制UITextView输入的字符数.相信大家在网上见得最多的是实现UITextViewDelegate - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;//有输入时触但对于中文键盘出示的联想字选

OC &amp; Swift中UITextFiled、UITextView限制输入字数

OC中限制字数的方法 我是用通知实现的,首先添加UITextFiled和UITextView的接收中心 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textViewNotifitionAction:) name:UITextViewTextDidChangeNotification object:nil]; [[NSNotificationCenter defaultCenter] addOb

UITextView限制输入字数

很多时候我们想限制textView中的输入字数,我们可以利用函数- (void)textViewDidChange:(UITextView *)textView中统计textView实现此功能.通过在此函数中统计你输入的字符的个数,当字数超过你限制的字数时调用函数-(NSString *)substringToIndex:(int)length(length是你想限制的字数). 这样当你输入的字符达到限定的个数时,将无法在往textView中输入数据.(实际上是你新输入的数据被函数-(NSStr