有许多时候都有这种需求,那就是限制字数操作。
在没有一套好的方法之前,比如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]];
}
}
}
}