要限制一个TextField的输入长度,包含字母、数字、特殊符号、汉字,大多数人想到以下这个方法
如果不输入汉字的话,下面这个方法可以,但是如果要输入汉字的话,这个方法就满足不了
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;//return NO to not change text
例如要设置字数限制为10:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (textField == self.titleField) {
if (textField.length >= 10) return NO;
}
return YES;
}
推荐方法:
汉字输入时需要区分汉字高亮输入的状态
废话不说,直接上代码
[_weixinTF addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
- (void) textFieldDidChange:(UITextField *)textField
{
if (textField==_weixinTF) {
_maxLength=15;
}else if (textField==_weiboTF){
_maxLength=10;
}
NSString *toBeString = textField.text;
NSString *lang = [[UIApplication sharedApplication]textInputMode].primaryLanguage; //ios7之前使用[UITextInputMode currentInputMode].primaryLanguage
if ([lang isEqualToString:@"zh-Hans"]) { //中文输入
UITextRange *selectedRange = [textField markedTextRange];
//获取高亮部分
UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];
if (!position) {// 没有高亮选择的字,则对已输入的文字进行字数统计和限制
if (toBeString.length > _maxLength) {
textField.text = [toBeString substringToIndex:_maxLength];
}
}
else{//有高亮选择的字符串,则暂不对文字进行统计和限制
}
}else{//中文输入法以外的直接对其统计限制即可,不考虑其他语种情况
if (toBeString.length > _maxLength) {
textField.text = [toBeString substringToIndex:_maxLength];
}
}
}
UITextView 直接上代码
[NSNotificationCenter defaultCenter]addObserver:selfselector:@selector(textViewDidChangeText:)name:UITextViewTextDidChangeNotification object:_suggestTV];
/**
监测用户输入文本长度
@param notification noti
*/
- (void)textViewDidChangeText:(NSNotification *)notification
{
_maxLength=30;
UITextView *textView = (UITextView *)notification.object;
NSString *toBeString = textView.text;
// 获取键盘输入模式
NSString *lang = [[UIApplication sharedApplication]textInputMode].primaryLanguage;
// 中文输入的时候,可能有markedText(高亮选择的文字),需要判断这种状态
// zh-Hans表示简体中文输入, 包括简体拼音,健体五笔,简体手写
if ([lang isEqualToString:@"zh-Hans"]) {
UITextRange *selectedRange = [textView markedTextRange];
//获取高亮选择部分
UITextPosition *position = [textView positionFromPosition:selectedRange.start offset:0];
// 没有高亮选择的字,表明输入结束,则对已输入的文字进行字数统计和限制
if (!position) {
if (toBeString.length > _maxLength) {
// 截取子串
textView.text = [toBeString substringToIndex:_maxLength];
}
} else { // 有高亮选择的字符串,则暂不对文字进行统计和限制
NSLog(@"有高亮输入文字======== %@",position);
}
} else {
// 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况
if (toBeString.length > _maxLength) {
// 截取子串
textView.text = [toBeString substringToIndex:_maxLength];
}
}
}
github上链接地址:点击打开链接