UITextFieldで入力文字数を制限する


UITextFieldを使ってユーザーに文字入力してもらう際に入力文字数や桁数を決めたい事はよくあると思います。

例によってstack overflowで見つけてきたのでご紹介しておきます。

[iphone – Set UITextField Maximum Length – Stack Overflow](http://stackoverflow.com/questions/2523501/set-uitextfield-maximum-length)

テキストフィールドのデリゲートメソッドで呼び出されるタイミングは文字入力があった瞬間なので入力前テキストフィールドと入力された文字列(コピペの場合も含む?)と入力の位置などが渡ってきます。んでその引数を使って旨いことやるようですね。

参照先のコードに追加で複数のフィールドを制御するパターンとしてtagでSwitchしています。

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

    
    NSUInteger oldLength = [textField.text length];
    NSUInteger replacementLength = [string length];
    NSUInteger rangeLength = range.length;
    
    NSUInteger newLength = oldLength - rangeLength + replacementLength;
    
    BOOL returnKey = [string rangeOfString: @"\n"].location != NSNotFound;
    
    switch (textField.tag) {
        case 0:
            return newLength <= 3 || returnKey;

            break;
        case 1:
            return newLength <= 2 || returnKey;

            break;
        case 2:
            return newLength <= 7 || returnKey;

            break;
        case 3:
            return newLength <= 2 || returnKey;
            
            break;
            
    }
    

    return returnKey;
}

間違いや改善案などがあるかたはお願いします。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です