UITextField如何限制限制文本输入长度
- 原理和UITextView限制文本输入长度原理一样,不同的是UITextField可以监听UIControlEventEditingChanged事件获取到UITextField文本输入改变;UITextView需要监听UITextViewTextDidChangeNotification通知
[field addTarget:self action:@selector(fieldTextDidChange:) forControlEvents:UIControlEventEditingChanged];
1. 具体实现代码
- (void)testTextField
{
UITextField *field = [[UITextField alloc] init];
field.frame = CGRectMake(100, 155, 200, 50);
[self.view addSubview:field];
field.backgroundColor = [UIColor grayColor];
[field addTarget:self action:@selector(fieldTextDidChange:) forControlEvents:UIControlEventEditingChanged];
}
- (void)fieldTextDidChange:(UITextField *)textField
{
/**
* 最大输入长度,中英文字符都按一个字符计算
*/
static int kMaxLength = 10;
NSString *toBeString = textField.text;
// 获取键盘输入模式
NSString *lang = [[UITextInputMode currentInputMode] primaryLanguage];
// 中文输入的时候,可能有markedText(高亮选择的文字),需要判断这种状态
// zh-Hans表示简体中文输入, 包括简体拼音,健体五笔,简体手写
if ([lang isEqualToString:@"zh-Hans"]) {
UITextRange *selectedRange = [textField markedTextRange];
//获取高亮选择部分
UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];
// 没有高亮选择的字,表明输入结束,则对已输入的文字进行字数统计和限制
if (!position) {
if (toBeString.length > kMaxLength) {
// 截取子串
textField.text = [toBeString substringToIndex:kMaxLength];
}
} else { // 有高亮选择的字符串,则暂不对文字进行统计和限制
}
} else {
// 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况
if (toBeString.length > kMaxLength) {
// 截取子串
textField.text = [toBeString substringToIndex:kMaxLength];
}
}
}