[iPhone SDK] UITextFieldを持つUIAlertView
色々なサイトで議論されているが,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行付けたバージョン.
レイアウトは自動でされます.
3行はさすがにちょっと厳しい.messageを削って表示.
と便利な感じです.