UITextFieldをやっつけろ!
何がやっつけろ!なんだろうね?
まあいいや、とにかくUITextFieldです。
iPhoneアプリで名前やアカウント名などの文字を入力する時なんかに使うあれです。

これを動的に、つまりInterface Builderを使わずに書こうとしたのですが、やっぱりはまりました。
たいていUITextFieldの入力部分にタッチしたらキーボードが出てきて、入力が終了して"Done"をタッチした時にキーボードが閉じるじゃないですか。
あれをやろうとしたわけです。
クラスファイルの構成はこんな感じ。
HogeAppDelegate
View1Controller : UIViewController
View1 : UIView
結論から先に言うと、UIButtonの時(頭と尻尾はくれてやる! なぜかUIButtonが動かない!)と同じでUITextField関連の記述をView1Controller.m内に書くとうまく動いてくれませんでした。
View1.m内にこんな感じで書きました。
入力完了時(例えばDoneをタッチ)にこのtextFieldShouldReturn:が呼ばれるそうな。
ところが、最初なかなか動いてくれなかったのですよ。
全然textFieldShouldReturn:が呼び出されない。
iPhoneプログラミング・・・のただのメモ。 リターンキーを押した時の振る舞いを決める
ああそうか、ってことで、View1.hの記述を変更。
プロトコルってやつだな。
まあUITextFieldクラスで処理してくれた内容をこっち(View1)側で処理しようとするとなんぞやりとりが必要なことは私でも理解できる。
その渡す先を指定するのが
いや、まだデリゲートってのがよくわかってないんですけどね。
ともかく、入力完了時にtextFieldShouldReturn:内の
まあいいや、とにかくUITextFieldです。
iPhoneアプリで名前やアカウント名などの文字を入力する時なんかに使うあれです。

これを動的に、つまりInterface Builderを使わずに書こうとしたのですが、やっぱりはまりました。
たいていUITextFieldの入力部分にタッチしたらキーボードが出てきて、入力が終了して"Done"をタッチした時にキーボードが閉じるじゃないですか。
あれをやろうとしたわけです。
クラスファイルの構成はこんな感じ。
HogeAppDelegate
View1Controller : UIViewController
View1 : UIView
結論から先に言うと、UIButtonの時(頭と尻尾はくれてやる! なぜかUIButtonが動かない!)と同じでUITextField関連の記述をView1Controller.m内に書くとうまく動いてくれませんでした。
View1.m内にこんな感じで書きました。
- (id)initWithFrame:(CGRect)frame { if ((self = [super initWithFrame:frame])) { UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(10, 56, 200, 30)]; textField.borderStyle = 3;//枠線のスタイル textField.placeholder = @"Enter Your Name";//入力前にうっすら書いてくれる [self addSubview:textField]; textField.delegate = self; textField.returnKeyType = UIReturnKeyDone;//"Done"にしてみた [textField release]; } return self; } - (BOOL)textFieldShouldReturn:(UITextField *)sender { NSLog(@"sender.text = %@" , sender.text ); [sender resignFirstResponder];//キーボードを閉じる return YES; }
入力完了時(例えばDoneをタッチ)にこのtextFieldShouldReturn:が呼ばれるそうな。
ところが、最初なかなか動いてくれなかったのですよ。
全然textFieldShouldReturn:が呼び出されない。
iPhoneプログラミング・・・のただのメモ。 リターンキーを押した時の振る舞いを決める
使用するには、当該 UITextField のデリゲートとなっているクラス内で
コードを記述する必要があります。
↑この記事を読んで、textField.delegate = self;ってのを足したらめでたく動いてくれましたが、、、コンパイル時(って言うのかな?とにかく実行時ではない)に警告がでます。
Class 'View1' does not implement the 'UITextFieldDelegate' protocol
ああそうか、ってことで、View1.hの記述を変更。
プロトコルってやつだな。
//@interface View1 : UIView { @interface View1 : UIView<UITextFieldDelegate> {
まあUITextFieldクラスで処理してくれた内容をこっち(View1)側で処理しようとするとなんぞやりとりが必要なことは私でも理解できる。
その渡す先を指定するのが
textField.delegate = self;と認識しています。
いや、まだデリゲートってのがよくわかってないんですけどね。
ともかく、入力完了時にtextFieldShouldReturn:内の
sender.textで入力した内容を得ることまではできました。
スポンサーサイト
<< データを保存するのに便利なクラス TopPage ついにこの日が!BIG1000第454回の結果! >>
トラックバック
トラックバックURL
https://ringsbell.blog.fc2.com/tb.php/394-43a16e46
https://ringsbell.blog.fc2.com/tb.php/394-43a16e46