码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-04-07 21:51:02      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:学习   ios开发   

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

在没有一套好的方法之前,比如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 限制限制字数做法

标签:学习   ios开发   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!