防止键盘无限输入

接到一个需求:评论输入框控制用户只能输入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];
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,204评论 4 61
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,327评论 25 709
  • UITextField : 只能输入一行,不可以滚动,可以设置提醒文字。 UITextView: 能输入多行,可以...
    甜水八角阅读 8,726评论 0 5
  • 时间去哪儿了 时间从我身边经过 带走它能带走的 留下了我 时间从来不属于我 我也从来不属于时间 我们彼此自由 却又...
    黑咖啡_钟阅读 747评论 0 0