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 はテキストフィールドに、
それ以外はテキストフィールドに表示されないのが確認できます。