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

有許多時候都有這種需求,那就是限制字數操作。

在沒有一套好的方法之前,比如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]];

            }

        }

    }

}


發佈了17 篇原創文章 · 獲贊 0 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章