美文网首页
[RedRain笔记] -限制TextView输入文字的长度

[RedRain笔记] -限制TextView输入文字的长度

作者: rxdxxxx | 来源:发表于2015-12-08 14:16 被阅读421次

    RedRain的简书:http://www.jianshu.com/users/29e03e6ff407/latest_articles

    有时需要输入限定长度的文字数量.但是由于键盘的联想和粘贴会造成字数超出规定数.

    在TextView中的代理方法处理一下超出的文字.就可以达到效果.

    
    static NSInteger const kText_Length_MAX = 20;
    
    - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)atext{
    
    if ((textView.text.length - range.length + atext.length) > kText_Length_MAX)
    
    {
    
    // 超出范围的文字, 截断到规定长度, 粘贴出现超出文字.
            NSString *tempString = [NSString stringWithFormat:@"%@%@",textView.text,atext];
            textView.text = tempString;
            
            
            NSString * lastStr =[tempString substringWithRange:NSMakeRange(kText_Length_MAX, 1)];
    
            // 如果这个字符是emoji的一部分,即无效的字符,那么这个就是nil
            if(lastStr.UTF8String == nil){
                
                NSInteger offset = tempString.length - kText_Length_MAX;
                NSInteger length = offset > 0 ? offset : 0;
                
                NSRange range = NSMakeRange(kText_Length_MAX+1  , length);
                textView.selectedRange = range;
                [textView insertText:@""];
                
            }else{
                NSString *substring = [tempString substringToIndex:kText_Length_MAX];
                textView.text = [substring copy];
            }
            return NO;
    }
    
    return YES;
    
    }
    
    //焦点发生改变
    - (void)textViewDidChangeSelection:(UITextView *)textView {
    
        if (textView.text.length> kText_Length_MAX) {
            // 超出范围的文字, 截断到规定长度
    
            NSString * lastStr =[textView.text substringWithRange:NSMakeRange(kText_Length_MAX, 1)];
    
            // 如果这个字符是emoji的一部分,即无效的字符,那么这个就是nil
            if(lastStr.UTF8String == nil){
                // 此处截断,为了杜绝掉多次deleteBackward的重复循环,减少执行效率.
                NSString *substring = [textView.text substringToIndex:kText_Length_MAX + 1];
                textView.text = [substring copy];
                [textView deleteBackward];
            }
            
            
            // 上面删除一次, 如果还是超出, 再截断一次, 这里就不会有emoji了.
            if (textView.text.length> kText_Length_MAX) {
                
                NSString *substring = [textView.text substringToIndex:kText_Length_MAX];
                textView.text = [substring copy];
            }
    
        }
    
    }
    
    

    相关文章

      网友评论

          本文标题:[RedRain笔记] -限制TextView输入文字的长度

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