UITextField Delegateを使って入力制限をする

UITextField に入力された文字をチェックする方法のメモ

(iOS5で試しています。) 

キーとなるもの

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

戻り値が BOOL

 YES を返すと、入力文字がフィールドに表示

 NO  を返すと、入力文字を表示しない

という仕組みです。

試しに、

文字 { S, A, B, C, D, s, a, b, c, d }の10文字のみ入力できるようにして、

それ以外は、ログに出力するサンプルを作ってみます。

サンプルコード

@interfaceViewController() <UITextFieldDelegate>

@end

@implementation ViewController

- (void)viewDidLoad

{

    [superviewDidLoad];

    

    // テキストフィールドの用意

    UITextField *textfield = [[UITextField alloc] initWithFrame:CGRectMake(50, 50, 200, 40)];

    textfield.borderStyle = UITextBorderStyleRoundedRect;    

    // delegate を設定

    textfield.delegate = self;

    

    [self.view addSubview:textfield];

}

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

{

    

    NSCharacterSet * set = [[NSCharacterSetcharacterSetWithCharactersInString:@"sabcdSABCD"] invertedSet];

    

    if ([string rangeOfCharacterFromSet:set].location != NSNotFound) {

        NSLog(@"SABCD以外が入力されました。 %@", string);

        return NO;

    }

    

    returnYES;

}

@end

実行すると、入力を許可する sabcdSABCD はテキストフィールドに、

それ以外はテキストフィールドに表示されないのが確認できます。