美文网首页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];
}

相关文章

  • 防止键盘无限输入

    接到一个需求:评论输入框控制用户只能输入200个字。于是在 可是这样的话,可以在输入中文的时候无限点击提示,于是各...

  • 防止键盘遮挡输入框

    在搭登录,注册等主要由文本输入框构成的页面时,要考虑键盘出现可能会遮挡屏输入框的情况,我采用的方法是把控件放在sc...

  • Flutter 学习(六)软键盘弹出顶掉内容、防止键盘超出屏幕

    Flutter 学习(六)软键盘弹出顶掉内容、防止键盘超出屏幕 在使用输入框获取焦点弹出键盘的时候内容内顶掉 解决...

  • 安全虚拟键盘 - 049

    Windows安全虚拟键盘 Windows可以输入密码和其他机密信息,以防止被称为键盘记录器的恶意程序攻击。安全...

  • iOS防止键盘遮挡

    其实防止键盘遮挡的思路很简单,就是通过键盘的通知来获取键盘的高度,然后将view向上偏移这个高度,自然就防止了键盘...

  • React Native防止键盘遮挡输入框

    防止遮挡键盘一般有两种方法: 1.KeyboardAvoidingView,在最外层加上,设置offset为150...

  • swift之防止键盘遮挡输入框

    1、先添加约束,这里用图上注册按钮到view底部的约束 2、实现代码

  • 知识介绍

    1、ATM机用金属键盘可以防止密码泄漏,ATM自动取款机输入密码后手指的温度会让键盘的温度改变,用热敏感照相机拍照...

  • Scanner

    创建Scanner 创建一个键盘输入字符串 创建一个键盘输入整数 键盘输入两个int数字,并且求出和值。 键盘输入...

  • Unity基础-Input模块

    鼠标输入 触摸输入 键盘输入

网友评论

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

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