iOS编程-UITextView固定长度输入文本

来源:互联网 发布:js 比较最大值 编辑:程序博客网 时间:2024/05/07 11:16
一般思路 对于文本输入框如果要限制输入长度,一般判断一下当前长度 如果长度大于固定长度就限制无法输入,在ios上由于存在中英文键盘的输入,要做到固定长度输入 稍显复杂些 ,下面是我的方法,应该会有更好的,有待优化

实现的主体方法 UITextView的回调
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString*)text

 首先我们要了解 回调的这个函数 都会给我们什么 
textview 当前textview中的内容
range 当前textview的location 如果输入length为0 删除length为1
text 我们输入的内容

问题点
最大的问题就在于中文键盘输入中文的时候 由于在输入的每次都会激活回调方法 所以textview的length会增加,如果单独用网上的一些方法类似
if (range.location >=MaxWords)
        return NO; 
  return YES;

这样判断会导致中文输入不完整 例如我的限制字数为10 当输入了hello 在输入中文的shijie(世界)会因为到i已经满10而无法输入。

针对这个问题
粗劣代码如下 只是个人的一个思路,例如还有中英文输入混合的情况

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{

  

    

    NSString *lang = [[UITextInputMode currentInputMode] primaryLanguage];

    if ([text length]==0) {

        if (self.maxWords<</span>maxWordsConst) {

            self.maxWords +=1;

        }

        

        return YES;

    }

    else {

        if ([lang isEqualToString:@"zh-Hans"]&&![text isMatchedByRegex:@"[\u4e00-\u9fa5]"]&&[textlength]==1) { //如果输入键盘为中文 并且输入的不为中文,长度为1(中文输入条上全英文) 就算达到上限也是可以输入的

            return YES;

            

        }

        else{

            if ([textView.text length]+[text length] > maxWordsConst){

                self.maxWords = 0;

                textView.text = [textView.text substringToIndex:maxWordsConst];

                return NO

            }

            else {

                self.maxWords = maxWordsConst - ([textView.text length]+[text length]);

                return YES;

            }

        }    

    }

}


0 0
原创粉丝点击