頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


UITextFieldをやっつけろ!

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

UITextFieldの実行結果

これを動的に、つまり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




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad