プログラマでありたい

おっさんになっても、プログラマでありつづけたい

UITextFieldの入力制限を実装する

 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 改行ボタンを完了ボタンに - 袖触れ合うも多少の縁


iPhone SDK アプリケーション開発ガイド
Jonathan Zdziarski
オライリージャパン
売り上げランキング: 64829