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) {
		//ここに処理を記入
	}
}