您的位置:首页 > 产品设计 > UI/UE

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

2014-01-22 15:04 218 查看
一般思路 对于文本输入框如果要限制输入长度,一般判断一下当前长度 如果长度大于固定长度就限制无法输入,在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;

            }

        }    

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: