1

uialertview 内にセグメント コントロールを表示したい。

UISegmentedControl *progress= [[UISegmentedControl alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];

[アラート addSubview:進行状況]; [アラートショー];

私は働きません。しかし、これを uiprogressview に変更すると表示されますが、セグメント コントロールは alertview に追加されません。

ここに何が欠けているのかわからない。

4

2 に答える 2

2

UIAlertView ドキ​​ュメントの最初の画面全体のテキストを見ると、次の非常に重要な注意事項が表示されます。

サブクラス化の注意事項

UIAlertView クラスはそのまま使用することを意図しており、サブクラス化はサポートしていません。このクラスのビュー階層は非公開であり、変更してはなりません

プライベートであり、変更してはならないものを変更するということは、次のことを意味します。最良の場合でも、iOS の将来のバージョンでアプリに予期しない問題が発生する可能性があります。最悪の場合、Apple がどのアプリが UIAlertView 階層をいじっているのかを検出しようとすると、アプリが拒否される可能性があります。

問題を解決するには、アラートの独自の実装、サブクラス化された UIView を作成し、それにセグメント化されたコントローラーを追加して、それを UIAlertView の代替として使用する必要があります

于 2013-05-30T11:45:37.613 に答える
1
you have to use adding subView in alertView's delegate method because alertView calculates its frame before showing to user.

UIAlertView *alertView=[[UIAlertView alloc] initWithTitle:@"Hello SubViews" message:nil delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[alertView show];

- (void)willPresentAlertView:(UIAlertView *)alertView
{
    CGFloat height = 25.0;

    UILabel *firstLabel = (UILabel*)[[alertView subviews] objectAtIndex:1];
    CGRect label_rect=firstLabel.frame;

    UISegmentedControl *segment=[[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Me",@"And",@"You",nil]];
    segment.segmentedControlStyle=UISegmentedControlStyleBar;
    [segment setFrame:CGRectMake(label_rect.origin.x, label_rect.origin.y+label_rect.size.height,label_rect.size.width,height)];

    UITextField *textField = [[UITextField alloc] initWithFrame:CGRectOffset(segment.frame, 0, height + 4)];
    [textField setText:@"Enter some text"];
    [textField setBackgroundColor:[UIColor whiteColor]];

    UIButton *okBtn=(UIButton*)[[alertView subviews] objectAtIndex:2];
    [okBtn setFrame:CGRectOffset(textField.frame, 0, height + 4)];

    [alertView addSubview:segment];
    [alertView addSubview:textField];

    alertView.frame = CGRectUnion(alertView.frame, CGRectOffset(alertView.frame, 0, 40));

}

出力 - - - - - - - -

ここに画像の説明を入力

于 2013-05-31T13:53:51.837 に答える