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];

/**

 监测用户输入文本长度

 

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值