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

    xiaoxiao2021-11-29  27

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

        }

    }

    转载请注明原文地址: https://ju.6miu.com/read-678683.html

    最新回复(0)