UITextField对中英文混合输入的长度限制

来源:互联网 发布:淘宝的地址在哪里修改 编辑:程序博客网 时间:2024/05/16 06:07

转载自:http://blog.sina.com.cn/s/blog_60f977e70101g4gj.html

主要步骤:

1. 添加监听

[[NSNotificationCenter defaultCenter] addObserver:self                                             selector:@selector(textFiledEditChanged:)                                                 name:@"UITextFieldTextDidChangeNotification"                                               object:alertTextField];

2. 实现监听方法

a. 键盘可以输入,但是中文不能输入到控件中

- (void)textFiledEditChanged:(NSNotification *)obj{    UITextField *textField = (UITextField *)obj.object;        NSString *toBeString = textField.text;    NSString *lang = [textField.textInputMode primaryLanguage]; // 键盘输入模式    if ([lang isEqualToString:@"zh-Hans"])    { // 简体中文输入,包括简体拼音,健体五笔,简体手写        UITextRange *selectedRange = [textField markedTextRange];        //获取高亮部分        UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];        // 没有高亮选择的字,则对已输入的文字进行字数统计和限制        if (!position)        {            if (toBeString.length > kNameMaxLength)            {                textField.text = [toBeString substringToIndex:kNameMaxLength];            }        }        // 有高亮选择的字符串,则暂不对文字进行统计和限制    }    // 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况    else    {        if (toBeString.length > kNameMaxLength)        {            textField.text = [toBeString substringToIndex:kNameMaxLength];        }    }}

b. 键盘禁止输入

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {    NSLog(@"%d-%d", textField.text.length, (string.length - range.length));    return textField.text.length + (string.length - range.length) <= kNameMaxLength;}- (void)textFiledEditChanged:(NSNotification *)notification {    UITextField *textField = notification.object;    if (textField.markedTextRange == nil && textField.text.length > kNameMaxLength) {        [textField setText:[textField.text substringToIndex:kNameMaxLength]];    }}

3. 移除监听器:

[[NSNotificationCenter defaultCenter]removeObserver:self                                           name:@"UITextFieldTextDidChangeNotification"                                         object:textField];



0 0
原创粉丝点击