UIAlertViewにUITextFieldを追加する方法
http://stackoverflow.com/questions/409599/how-to-move-the-buttons-in-a-uialertview-to-make-room-for-an-inserted-uitextfield
http://www.iphonedevsdk.com/forum/iphone-sdk-development/1704-uitextfield-inside-uialertview.html
iPhoneにアプリをインストールするときに出てくる、パスワード入力を求めるアラート。あれって、デフォルトで用意されてないんですよね。上記サイトを参考に作ってみました。
@interface hoge : UIViewController <UIAlertViewDelegate, UITextFieldDelegate>
hoge.hでUIAlertViewDelegateに準拠させます。(UITextFieldDelegateは任意。)
そしてhoge.mでは、
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"hoge" message:@"\n" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Done", nil]; CGAffineTransform trans = CGAffineTransformMakeTranslation(0.0, 100.0); [alert setTransform:trans]; UITextField* textField = [[UITextField alloc] initWithFrame:CGRectMake(20.0, 45.0, 245.0, 25.0)]; [alert addSubview:textField]; [alert show]; [alert release]; [textField becomeFirstResponder]; [textField release];
コード中のアラートを出現させたい任意の場所に記述してください。
UIAlertViewをallocする際に、メッセージに空の改行を入れておいて、その空白部分にUITextViewをsubviewとして追加するという方法です。
CGAffinTransformで、アラートをY軸方向に移動するのは、出現するキーボードにアラートが隠れてしまわないようにするためです。最後にbecomeFirstResponderメソッドでキーボードを出現させますが、アラートを閉じるとsubviewも消えるので、resignFirstResponderメソッドを記述する必要はありません。
ちなみに上記コードでは「Cancel」ボタン以外に「Done」ボタンを設定していますが、この「Done」ボタンをクリックしたときに処理を行いたい場合には下記のコードを追加してください。
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { if (buttonIndex == 1) { //ここに処理を記入 } }