アクティブな(フォーカスのある)UITextFieldを取得する方法
http://d.hatena.ne.jp/shunsuk/20091127/1259325178
なるほど、これを読んで目からウロコでした。
iPhoneのテンキー(UIKeyboardTypeNumberPad)って「DONE」ボタンがないでしょ?
http://d.hatena.ne.jp/manmarina/20100621/1277101067
これに「DONE」ボタンを付けたとき、キーボードを引っ込むようにしたかったんだけど、アクティブなUITextFieldを取得する方法がわからなかったんですよね。通常のキーボードなら、引数に(UITextField *)textFieldがあるので、
[textField resignFirstResponder];
とすればいいけど、「DONE」ボタンはオリジナルのメソッドをトリガーするので、何らかの方法でアクティブUITextFieldを取得しなければなりません。どうしたもんか…、途方に暮れていたときに見つけたのが上記の記事。なるほど、その手がありましたか。
ヘッダで宣言しておいた、
UITextfield *activeField;
に、UITextFieldがアクティブになったときに、delegateメソッドにてtextFieldへのポインタを格納。
- (void)textFieldDidBeginEditing:(UITextField *)textField { activeField = textField; }
そして、「DONE」ボタンをクリックしたときにトリガーされるメソッドに、
- (void)doneButton:(id)sender { [activeField resignFirstResponder]; }
などと記述すればよいのですね〜。たしかに正攻法ではないけど、シンプルでわかりやすい方法です。