效果是这样,在一个文本框内,限制字符最大长度为9,当超过这个长度时,即使能输入,也会被截取
_textField = [[UITextField alloc] initWithFrame:CGRectMake(14, 3, kScreenWidth-18, 34)];
_textField.placeholder = @"设置个性昵称(不能超过9个字符)";
_textField.delegate = self;
_textField.textColor = [UIColor grayColor];
_textField.clearButtonMode = UITextFieldViewModeWhileEditing;
[textFieldBg addSubview:_textField];
若是只有英文、数字等字符,可以用
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSString *str = [NSString stringWithFormat:@"%@",textField.text,string];
if (str.length > 9) {
return NO;
}
return YES;
}
但若出现汉字时,该方法就失效。需要用其它代替
[_textField addTarget:self action:@selector(limitStrLength:) forControlEvents:UIControlEventEditingChanged];
-(void)limitStrLength:(UITextField *)sender
{
bool isChinese;//判断当前输入法是否是中文
if ([[sender.textInputMode primaryLanguage] isEqualToString: @"en-US"]) {
isChinese = false;
} else {
isChinese = true;
}
if(sender == _textField) {
NSString *str = [_textField text];
if (isChinese) { //中文输入法下
UITextRange *selectedRange = [_textField markedTextRange];
//获取高亮部分
UITextPosition *position = [_textField positionFromPosition:selectedRange.start offset:0];
// 没有高亮选择的字,则对已输入的文字进行字数统计和限制
if (!position) {
if ( str.length>=9) {
NSString *strNew = [NSString stringWithString:str];
[_textField setText:[strNew substringToIndex:9]];
}
} else {
NSLog(@"输入的英文还没有转化为汉字的状态");
}
}else{
if ([str length]>=9) {
NSString *strNew = [NSString stringWithString:str];
[_textField setText:[strNew substringToIndex:9]];
}
}
}
}
然后上边的那个代理方法也可以删除了