天天看點

textField限制輸入長度

對字元串的長度限制,實作如下:

#define kMaxLength 20

- ( BOOL) textField:( UITextField *) textField shouldChangeCharactersInRange:( NSRange) range replacementString:( NSString *) string {

    NSString * toBeString = [ textField . text stringByReplacingCharactersInRange: range withString: string ];

    if ( toBeString . length > kMaxLength && range . length != 1 ){

        textField . text = [ toBeString substringToIndex: kMaxLength ];

        return NO;

    }

    return YES; } 對漢字進行限制輸入長度 #define kMaxLength 20

<1>在init時候注冊notification: [[ NSNotificationCenter defaultCenter ] addObserver: self selector: @selector( textFiledEditChanged:)

                                            name: @"UITextFieldTextDidChangeNotification"

                                          object: myTextField ];

<2>實作監聽方法: -( void) textFiledEditChanged:( NSNotification *) obj {

    UITextField * textField = ( UITextField *) obj . object;

    NSString * toBeString = textField . text;

    NSString * lang = [[ UITextInputMode currentInputMode ] primaryLanguage ]; // 鍵盤輸入模式

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

        UITextRange * selectedRange = [ textField markedTextRange ];

        //擷取高亮部分

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

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

        if ( ! position) {

            if ( toBeString . length > kMaxLength) {

                textField . text = [ toBeString substringToIndex: kMaxLength ];

            }

        }

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

        else {

        }

    }

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

    else {

        if ( toBeString . length > kMaxLength) {

            textField . text = [ toBeString substringToIndex: kMaxLength ];

        }

    }

}

<3>在dealloc裡登出掉監聽方法,切記! -( void) dealloc {

    [[ NSNotificationCenter defaultCenter ] removeObserver: self

                                            name: @"UITextFieldTextDidChangeNotification"

                                          object: _albumNameTextField ];

}