≫ 逆引きObjective-C for iPhoneアプリ ≫ iPhoneアプリ開発 UI部品 ≫ UITextField:テキストの入力 ≫ UITextFieldの入力文字数を制限する
UITextFieldにはmaxlengthのような便利なプロパティがありません.
入力文字数を制限するにはテキストが入力されたときのイベントを取得して入力を制御する必要があります.
具体的にはtextField:shouldChangeCharactersInRange:replacementString:メソッドを実装します.このメソッドはテキストが編集されたときに呼ばれます.戻り値として真を返すとその編集が有効になり,偽を返すと編集が無効になります.
つまり最大文字数をオーバーする入力があった場合は編集を無効にすることで入力文字数を制限することができます.
UITextFieldの入力文字数を制限するサンプルプログラムを以下に示します. 以下のサンプルではtextField:shouldChangeCharactersInRange:replacementString:メソッドを実装するためにUITextFieldDelegateプロトコルを指定しています.
#import <UIKit/UIKit.h> @interface ViewController : UIViewController <UITextFieldDelegate> @end
#define MAX_LENGTH 8
- (void)viewDidLoad
{
[super viewDidLoad];
// UITextFieldのインスタンスを生成
CGRect rect = CGRectMake(10, 10, 200, 25);
UITextField *textField = [[UITextField alloc]initWithFrame:rect];
// 枠線のスタイルを設定
textField.borderStyle = UITextBorderStyleRoundedRect;
// デリゲートを設定
textField.delegate = self;
// UITextFieldのインスタンスをビューに追加
[self.view addSubview:textField];
}
/**
* テキストが編集されたとき
* @param textField イベントが発生したテキストフィールド
* @param range 文字列が置き換わる範囲(入力された範囲)
* @param string 置き換わる文字列(入力された文字列)
* @retval YES 入力を許可する場合
* @retval NO 許可しない場合
*/
- (BOOL)textField:(UITextField *)textField
shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
// すでに入力されているテキストを取得
NSMutableString *text = [textField.text mutableCopy];
// すでに入力されているテキストに今回編集されたテキストをマージ
[text replaceCharactersInRange:range withString:string];
// 結果が文字数をオーバーしていないならYES,オーバーしている場合はNO
return ([text length] <= MAX_LENGTH);
}
/**
* キーボードでReturnキー選択時のイベントハンドラ
* @param textField イベントが発生したテキストフィールド
*/
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
// キーボードを隠す
[self.view endEditing:YES];
return YES;
}
Objective-Cサンプルプログラムの実行結果は以下のようになります.(8文字以上は入力できません.)
Objective-CでiPhoneアプリを作る際に読んだ本です.よかったら参考にしてみてください.私にとってはかなり役に立ちましたよ!
UIKitの詳細リファレンスとしては最高の書籍だと思います.
UIKitに特化した構成となっており,読み物としてもリファレンスとしても使えます.
黒本の通称を持つ良書です.
Objective-Cの基礎となる部分をガッチリ押さえられます.
プログラミング初学者が読むには敷居が高いですが,仕事でObjective-Cを書く人は絶対に読んでおいたほうがいいです.