UITextField, UITextView長度限制

//UITextField長度的限制

[self.nameTextFieldaddTarget:selfaction:@selector(textFieldDidChange:)forControlEvents:UIControlEventEditingChanged];


#define kMaxNameLength  (10)

- (void)textFieldDidChange:(UITextField *)textField

{

    if (textField == self.nameTextField) {

        NSString *toBeString = textField.text;

//        NSString *lang = [[UITextInputMode currentInputMode] primaryLanguage]; //鍵盤輸入模式(有警告,改爲下面一行)

        NSString *lang = [textField.textInputModeprimaryLanguage];// 鍵盤輸入模式

        if ([langisEqualToString:@"zh-Hans"]) {// 簡體中文輸入,包括簡體拼音,健體五筆,簡體手寫

            UITextRange *selectedRange = [textField markedTextRange];

            //獲取高亮部分

            UITextPosition *position = [textField positionFromPosition:selectedRange.startoffset:0];

            //沒有高亮選擇的字,則對已輸入的文字進行字數統計和限制

            if (!position) {

                if (toBeString.length > kMaxNameLength) {

                    textField.text = [toBeStringsubstringToIndex:kMaxNameLength];

                }

            }

            //有高亮選擇的字符串,則暫不對文字進行統計和限制

            else{

                

            }

        }

        //中文輸入法以外的直接對其統計限制即可,不考慮其他語種情況

        else{

            if (toBeString.length > kMaxNameLength) {

                textField.text = [toBeStringsubstringToIndex:kMaxNameLength];

            }

        }

    }

}


////////////////////

//UITextView的長度限制

爲了限制uitextview輸入的字符數,一般採取如下做法:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range

 replacementText:(NSString *)text

{

    //判斷輸入的字符,是否超過界限

    NSString *str = [NSString stringWithFormat:@"%@%@", textView.text, text];

    if (str.length > kMaxLen)

    {

        textView.text = [str substringToIndex:kMaxLen];

        return NO;

    }

    return YES;

}

 但是,在漢語拼音輸入狀態下,如果有鍵盤聯想漢字輸入,則無法回調到該函數,所以可以一直聯想輸入下去,做不到限制字符數量的目的,爲了解決這個問題,我們在textViewDidChange進行限制。

- (void)textViewDidChange:(UITextView *)textView

{

    if ( textView.text.length > kMaxLen)

    {

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

    }

 }

此時,如果在拼音狀態下輸入會有crash ,因爲漢語拼音狀態下,聯想出的漢字等待用戶選擇,在用戶選擇前的狀態下,不能改變textView.text。解決辦法:

- (void)textViewDidChange:(UITextView *)textView

{

    if (textView.markedTextRange == nil && textView.text.length > kMaxLen)  //加上 textView.markedTextRange == nil判斷,當此屬性爲nil時,代表不在這種聯想輸入等待確定狀態。

    {

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

    }

 }


附帶一個網頁鏈接,但是這個方法我還沒有實驗過,查找資料時看到的。

http://www.techjini.com/blog/2014/10/27/maximum-length-for-uitextfield-with-t9-keyboard-on-ios/

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