首页 > 其他 > 详细

UITextField && UITextView 限制限制字数做法

时间:2015-04-07 21:49:45      阅读:200      评论:0      收藏:0      [点我收藏+]

有许多时候都有这种需求,那就是限制字数操作。

在没有一套好的方法之前,比如textView的限制方法就是利用代理方法


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

{

if (textView.text.length  >= number) {

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

            return NO;

        }else {

            return YES;

        }

}


可这种普遍的方式绝逼有问题,单纯的英文还好说。可是你在使用拼音就会出现问题。那就是后面的时候你想输入发现都输入不上去。但是根据连锁出来的词语却还能直接点上去。


所以,不能让用户连拼音都打不出来,就只能限制输入成功之后的字数咯。


故,那就在每当text改变时去判断字数就可以了。


textView 有代理方法 - (void)textViewDidChange:(UITextView *)textView可以实时的监听text内容变化,而 textFiled 却没有,但是 @interface UITextField : UIControl <UITextInput, NSCoding>

所以可以添加监听 

[valueField addTarget:self action:@selector(changeText:) forControlEvents:UIControlEventEditingChanged];


所以不管是代理方法还是自己实现的监听(textView代理实现大同小异),内容就可以去判断字数了:


- (void)changeText:(UITextField *)sender

{

    bool isChinese;//判断当前输入法是否是中文

    if ([[[UITextInputMode currentInputMode] primaryLanguage] isEqualToString: @"en-US"]) {

        isChinese = false;

    }

    else

    {

        isChinese = true;

    }

    

    NSInteger number = 0; //需要限制的字数

    if (sender.tag == 30000) {

        number = 5;

    }else if (sender.tag == 30001)

    {

        number = 11;

    }

    

    if(sender.tag == 30000) {

        // number

        NSString *str = [[sender text] stringByReplacingOccurrencesOfString:@"?" withString:@""];

        if (isChinese) { //中文输入法下

            UITextRange *selectedRange = [sender markedTextRange];

            //获取高亮部分

            UITextPosition *position = [sender positionFromPosition:selectedRange.start offset:0];

            // 没有高亮选择的字,则对已输入的文字进行字数统计和限制

            if (!position) {

                NSLog(@"汉字");

                if ( str.length>=number + 1) {

                    NSString *strNew = [NSString stringWithString:str];

                    [sender setText:[strNew substringToIndex:number]];

                }

            }

            else

            {

                NSLog(@"输入的英文还没有转化为汉字的状态");

            }

        }else{

            NSLog(@"str=%@; 本次长度=%lu",str,(unsigned long)[str length]);

            if ([str length]>=number + 1) {

                NSString *strNew = [NSString stringWithString:str];

                [sender setText:[strNew substringToIndex:number]];

            }

        }

    }

}


UITextField && UITextView 限制限制字数做法

原文:http://blog.csdn.net/wq5201314o/article/details/44923875

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!