限制textField输入字数,多了不让输入

- (BOOL)textField:(UITextField *)textField1 shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

{

    NSInteger pointLength =0;

    if (textField1 ==_addGroupView.textField) {

        NSInteger existedLength = textField1.text.length;

        NSInteger selectedLength = range.length;

        NSInteger replaceLength = string.length;

        pointLength = existedLength - selectedLength + replaceLength;

    }

    //超过16就不能在输入了

    if (pointLength >12) {

        returnNO;

    }else{

        returnYES;

    }

    

}


以上方法在iPhone自带键盘时会出现问题。后来找到如下方法。

在textField中

首先:添加监听方法 。[textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];


然后实现方法:

- (void)textFieldDidChange:(UITextField *)textField

{

    int length = 5;//限制的字数

    NSString *toBeString = textField.text;

    NSString *lang = [[UITextInputMode currentInputMode] primaryLanguage]; // 键盘输入模式

    if ([lang isEqualToString:@"zh-Hans"]) { // 简体中文输入,包括简体拼音,健体五笔,简体手写

        UITextRange *selectedRange = [textField markedTextRange];       //获取高亮部分

        UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];

        // 没有高亮选择的字,则对已输入的文字进行字数统计和限制

        if (!position || !selectedRange)

        {

            if (toBeString.length > length)

            {

                NSRange rangeIndex = [toBeString rangeOfComposedCharacterSequenceAtIndex:length];

                if (rangeIndex.length == 1)

                {

                    textField.text = [toBeString substringToIndex:length];

                }

                else

                {

                    NSRange rangeRange = [toBeString rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, length)];

                    textField.text = [toBeString substringWithRange:rangeRange];

                }

            }

        }

        

    }

}


对于TextView,本来就有 textViewDidChange:  方法。直接实现就好。


- (void)textViewDidChange:(UITextView *)textView

{

    if (textView.text.length > TEXT_MAXLENGTH) {

        UITextRange *markedRange = [textView markedTextRange];

        if (markedRange) {

            return;

        }

        //Emoji2个字符,如果是超出了半个Emoji,用15位置来截取会出现Emoji截为2

        //超出最大长度的那个字符序列(Emoji算一个字符序列)range

        NSRange range = [textView.text rangeOfComposedCharacterSequenceAtIndex:TEXT_MAXLENGTH];

        textView.text = [textView.text substringToIndex:range.location];

    }

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值