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