0

ユーザーが連絡先をアドレス帳に追加するときに、姓、名、ミドルネームを入力する必要があります。

PS: 最後に、それを可能にする control を見つけました: https://github.com/eaigner/CODialog

4

3 に答える 3

1

代わりに使用できるものを提案できますか?

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 つのオプションがあります。

  1. そのまま使用してください (いくつかの形式の入力は、事前定義されたスタイルを介して利用できることを覚えておいてください)
  2. 他のView Controllerを使用してモーダルビューを表示する
  3. 代替品を使用してください。ただし、UIAlertView をサブクラス化しないもの。


しかし、誰かがまだビュー階層をいじるのは良い考えであり、私やアップルのエンジニアよりもよく知っていると確信しているなら、ここにコードがあります

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));

結果:

ここに画像の説明を入力

于 2013-01-04T20:15:24.983 に答える
0

あなたはこのようにすることができます。

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 では実行されません。

于 2013-01-04T19:48:54.087 に答える
0

アラート ビューに 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];
于 2014-11-19T09:37:57.937 に答える