色々なサイトで議論されているが,UIAlertViewにUITextFieldを簡単に追加する術がない.
実は,Private methodで,

- (UITextField*)addTextFieldWithValue:(NSString*)value label:(NSString*)label;
- (UITextField*)textFieldAtIndex:(NSUInteger)index;
- (NSUInteger)textFieldCount;
- (UITextField*)textField;

以上のようなメソッドが用意されているのだが,Undocumentedなため,うかつに使えない.
Jailbreak時代は使っていたのに・・・・(多分画面を回転させたときの挙動を考えて,APIを公開することを躊躇しているんじゃないかと推測.横向きの時は,そのまま表示すると,テキストフィールドが見えなくなって,めちゃくちゃになる.他にはマルチスレッドが絡むHUDの表示まわりのAPIも公開されていない.整理するのが難しいのかなあ)
そして,ここでは,自前でUITextFieldを追加するコードが議論されている.
http://discussions.apple.com/thread.jspa?messageID=8707554
これを拡張し,自由に数をUITextFieldの数を増やせるクラスを作ってみた.UITextFieldには,インデックスとラベルでアクセスできるようにしてみた.

- (NSArray*)textFieldTags;
- (NSInteger)textFieldCount;
- (UITextField*)textFieldWithTag:(NSString*)tag ;
- (UITextField*)textFieldAtIndex:(NSInteger)index;
- (BOOL)addTextFieldDefaultValue:(NSString*)value
placeholder:(NSString*)placeholder
tag:(NSString*)tag;

使い方は,普通のUIAlertViewと同じ.

SNAlertView* view = [[SNAlertView alloc] initWithTitle:@"Fill in the following forms"
message:nil
delegate:self
cancelButtonTitle:@"cancel"
otherButtonTitles:@"ok", nil];
[view addTextFieldDefaultValue:@"" placeholder:@"Element1" tag:@"tag1"];
[view addTextFieldDefaultValue:@"" placeholder:@"Element2" tag:@"tag2"];
[view addTextFieldDefaultValue:@"" placeholder:@"Element3" tag:@"tag3"];
[view show];
[view release];

下は,UITextFieldを2行付けたバージョン.
レイアウトは自動でされます.


snalert01.png snalert02.png

3行はさすがにちょっと厳しい.messageを削って表示.

snalert03.png

と便利な感じです.