天天看点

UITextField UITextView 输入长度限制

要限制一个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];

- (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上链接地址:点击打开链接