美文网首页iOS那些坑
防止键盘无限输入

防止键盘无限输入

作者: zgsddzwj | 来源:发表于2017-08-17 18:53 被阅读113次

    接到一个需求:评论输入框控制用户只能输入200个字。于是在

    - (BOOL)textView:(UITextView*)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString*)text
    {
    
    //添加如下代码
        NSString* toBeString =     [textView.textstringByReplacingCharactersInRange:rangewithString:text];
        if(toBeString.length>self.maxTextInputNum) {
          returnNO;
        }
    }
    

    可是这样的话,可以在输入中文的时候无限点击提示,于是各种搜索,找到了以下方法:

    适用于textView textField

    + (void)limitTextInputWithNotification: (NSNotification *)noti InMaxLength: (CGFloat)length {
        id textInput;
        if ([noti.object isKindOfClass:[UITextField class]]) {
            textInput = (UITextField *)noti.object;
        } else if ([noti.object isKindOfClass:[UITextView class]]) {
            textInput = (UITextView *)noti.object;
        } else {
            return;
        }
        NSString *toBeString = [textInput text];
    //    if ([noti.object isKindOfClass:[UITextField class]]) { //昵称禁止输入表情
    //        [textInput setText:[self disable_emoji:[textInput text]]];
    //    }
        NSString *lang = [[textInput textInputMode] primaryLanguage];
        if ([lang isEqualToString:@"zh-Hans"])// 简体中文输入
        {
            //获取高亮部分
            UITextRange *selectedRange = [textInput markedTextRange];
            UITextPosition *position = [textInput positionFromPosition:selectedRange.start offset:0];
            
            // 没有高亮选择的字,则对已输入的文字进行字数统计和限制
            if (!position)
            {
                if (toBeString.length > length)
                {
                    [textInput setText:[toBeString substringToIndex:length]];
                }
            }
        }
        // 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况
        else
        {
            if (toBeString.length > length)
            {
                NSRange rangeIndex = [toBeString rangeOfComposedCharacterSequenceAtIndex:length];
                if (rangeIndex.length == 1)
                {
                    [textInput setText:[toBeString substringToIndex:length]];
                }
                else
                {
                    NSRange rangeRange = [toBeString rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, length)];
                    [textInput setText: [toBeString substringWithRange:rangeRange]];
                }
            }
        }
    
    }
    
    

    使用时候发送通知即可:

     _NC_Add(self, @selector(textViewEditChanged:),UITextViewTextDidChangeNotification, nil);
    

    监听通知:

    - (void)textViewEditChanged:(NSNotification *)notif;
    {
        [Untitles limitTextInputWithNotification:notif InMaxLength:200];
    }
    

    相关文章

      网友评论

        本文标题:防止键盘无限输入

        本文链接:https://www.haomeiwen.com/subject/ulpnrxtx.html