UITextFieldに入力された文字列チェックをスマートに行う方法がないか探していました。
どうやらロード時にテキストフィールドをデリゲートすれば、shouldChangeCharactersInRangeでイベントを取れるようです。このメソッドは、booleanで返すのでチェックして不可であればFALSEを返せばよいのです。実装の抜粋は、以下のとおりです。この例では、文字列長を5桁以内に制限しています。
- (void)viewDidLoad {
[textField setDelegate:self];
[super viewDidLoad];
}
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
int maxLength = 5;
NSMutableString *text = [[textField.text mutableCopy] autorelease];
[text replaceCharactersInRange:range withString:string];
return [text length] <= maxLength;
}
なお、このままビルドすると、次のようなエラーが出ると思います。
Class '****' does not implement the 'UITextFieldDelegate' protocol
呼び出しているUIViewControllerのヘッダーに宣言を加えてください。
@interface CompoundViewController : UIViewController <UITextFieldDelegate> {
}
尚、上記の例だと全てのUITextFieldに一律に同一のチェックが行われます。フィールドごとにチェック内容を変える場合は、フィールドにTagを設定する方法などが考えられます。
if (textField.tag == 1) {
}
参考:
あらきんぐのiPhone開発ブログ テキストフィールドの入力チェック
Team Dyquem! 自作iPhoneアプリの庭 UITextFieldの文字数をリアルタイムで数えたい
UITextFieldの入力文字数を制限する | Programmer’s High
Happy Happy iPhone Game Programming : UITextFieldで文字数制限をする
iPhone UITextView 改行ボタンを完了ボタンに - 袖触れ合うも多少の縁
オライリージャパン
売り上げランキング: 64829
