ユーザーが連絡先をアドレス帳に追加するときに、姓、名、ミドルネームを入力する必要があります。
PS: 最後に、それを可能にする control を見つけました: https://github.com/eaigner/CODialog
ユーザーが連絡先をアドレス帳に追加するときに、姓、名、ミドルネームを入力する必要があります。
PS: 最後に、それを可能にする control を見つけました: https://github.com/eaigner/CODialog
代わりに使用できるものを提案できますか?
presentViewController:animated:completion:
(ios 5+)またはios <5(非推奨)を介してモーダルビューを提示しますpresentModalViewController:animated:
アラートビューを使い続けたい場合は、cocoacontrols.com で代替品を見つけることができます。
サブクラス化に関する注意事項
UIAlertView クラスはそのまま使用することを意図しており、サブクラス化はサポートしていません。このクラスのビュー階層は非公開であり、変更してはなりません。
テキスト ビューを追加すると、ビュー階層が変更され、アプリストアの送信拒否につながる可能性があります。
このカテゴリを使用すると、任意のビューのビュー階層を簡単に調べることができます。(またはpo [alertView recursiveDescription]
デバッガーコンソールで使用)
注: これは、実際のアプリケーションでは決して使用してはならないコードです。
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"title"
message:@"msg"
delegate:nil
cancelButtonTitle:@"ok"
otherButtonTitles: nil];
UITextField *textFiled = [[UITextField alloc] initWithFrame:CGRectMake(12.0, 45.0, 260.0, 25.0)];
[textFiled setText:@"dont try that at home"];
[alertView addSubview:textFiled];
[alertView show];
[alertView printSubviewsWithIndentation:4];
この階層をログに記録します
[0]: class: 'UIImageView'
[1]: class: 'UILabel'
[2]: class: 'UILabel'
[3]: class: 'UIAlertButton'
[0]: class: 'UIImageView'
[1]: class: 'UIButtonLabel'
[4]: class: 'UITextField'
この結果
textView は、他のすべての上に配置されています。実際には の下に配置する必要があります[2]: class: 'UILabel'
。これは、ビュー階層をいじる (ループして再配置する) か、UIAlertView をサブクラス化して を上書きすることで実行できますlayoutSubviews
。どちらも、アップルは望んでいません。
要約すると、UIAlertView に関しては、次の 3 つのオプションがあります。
しかし、誰かがまだビュー階層をいじるのは良い考えであり、私やアップルのエンジニアよりもよく知っていると確信しているなら、ここにコードがあります
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"title"
message:@"Please read carefully the next 3 lines"
delegate:nil
cancelButtonTitle:@"ok"
otherButtonTitles: nil];
[alertView show];
CGFloat height = 25.0;
UILabel *msgLabel = [[alertView subviews] objectAtIndex:2];
UITextField *textField1 = [[UITextField alloc] initWithFrame:CGRectMake(msgLabel.frame.origin.x, msgLabel.frame.origin.y+msgLabel.frame.size.height, msgLabel.frame.size.width, height)];
[textField1 setText:@"dont try that at home"];
[textField1 setBackgroundColor:[UIColor whiteColor]];
UITextField *textField2 = [[UITextField alloc] initWithFrame:CGRectOffset(textField1.frame, 0, height + 4)];
[textField2 setText:@"REALLY! dont try that at home"];
[textField2 setBackgroundColor:[UIColor whiteColor]];
UITextField *textField3 = [[UITextField alloc] initWithFrame:CGRectOffset(textField2.frame, 0, height + 4)];
[textField3 setText:@"REALLY! dont try that at home"];
[textField3 setBackgroundColor:[UIColor whiteColor]];
NSArray *followringSubviews = [[alertView subviews] subarrayWithRange:NSMakeRange(3, [[alertView subviews] count] - 3)];
[followringSubviews enumerateObjectsUsingBlock:^(UIView *view, NSUInteger idx, BOOL *stop) {
view.frame = CGRectOffset(view.frame, 0, 3*height);
}];
[alertView addSubview:textField1];
[alertView addSubview:textField2];
[alertView addSubview:textField3];
alertView.frame = CGRectUnion(alertView.frame, CGRectOffset(alertView.frame, 0, 80));
結果:
あなたはこのようにすることができます。
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"title" message:@"msg" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:nil];
UITextField *txtField = [[UITextField alloc] initWithFrame:CGRectMake(12.0, 45.0, 260.0, 25.0)];
txtField.text=@"anoop here";
[alertView addSubview:txtField];
[alertView show];
編集:
カスタム ビューでも問題なく動作します。(以前の編集でわかるように。)
カスタムの形状サイズ、色、テキスト サイズなどでカスタム ビューを作成し、モデル ウィンドウとして表示します。
編集2:
上記のコードは iOS7 では実行されません。
アラート ビューに accessoriesView プロパティを使用する
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"change Password " message:@"" delegate:nil cancelButtonTitle:@"NO" otherButtonTitles:@"YES", nil];
CGRect frame = CGRectMake(0, 0, self.view.frame.size.width, 300);
UIView *view = [[UIView alloc] initWithFrame:frame];
UITextField* text1 = [[UITextField alloc] initWithFrame: CGRectMake(10, 10,self.view.frame.size.width-125, 30)];
text1.backgroundColor=[UIColor whiteColor];
UITextField* text2 = [[UITextField alloc] initWithFrame: CGRectMake(10, 45, self.view.frame.size.width-125, 30)];
text2.backgroundColor=[UIColor whiteColor];
UITextField* text3 = [[UITextField alloc] initWithFrame: CGRectMake(10, 80, self.view.frame.size.width-125, 30)];
text3.backgroundColor=[UIColor whiteColor];
text1.layer.borderColor=[UIColor lightGrayColor].CGColor;
text1.layer.borderWidth=1;
text2.layer.borderColor=[UIColor lightGrayColor].CGColor;
text2.layer.borderWidth=1;
text3.layer.borderColor=[UIColor lightGrayColor].CGColor;
text3.layer.borderWidth=1;
text1.placeholder=@" Enter old password ";
[view addSubview:text1];
[view addSubview:text2];
[view addSubview:text3];
[alertView setValue:view forKey:@"accessoryView"];
view.backgroundColor = [UIColor whiteColor];
[alertView show];