1

我想在 uialertview 中显示段控制。

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

[警报添加子视图:进度];[警报显示];

我不工作。但是,如果我将其更改为 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 回答