我想在 uialertview 中显示段控制。
UISegmentedControl *progress= [[UISegmentedControl alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];
[警报添加子视图:进度];[警报显示];
我不工作。但是,如果我将其更改为 uiprogressview,它会显示出来。但是段控制不会添加到 alertview。
不知道这里缺少什么。
我想在 uialertview 中显示段控制。
UISegmentedControl *progress= [[UISegmentedControl alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];
[警报添加子视图:进度];[警报显示];
我不工作。但是,如果我将其更改为 uiprogressview,它会显示出来。但是段控制不会添加到 alertview。
不知道这里缺少什么。
如果您查看UIAlertView 文档中的第一屏文本,您会看到这个非常重要的注释:
子类化注释
UIAlertView 类旨在按原样使用,不支持子类化。此类的视图层次结构是私有的,不得修改。
修改不应该修改的私有内容意味着:在最好的情况下,在未来版本的 iOS 中,您的应用程序可能会发生潜在的意外坏事;在最坏的情况下,如果 Apple 能够检测到哪些应用程序与 UIAlertView 层次结构发生冲突,您的应用程序可能会被拒绝。
为了解决您的问题,您应该创建自己的警报实现、子类 UIView,并向其中添加分段控制器并将其用作 UIAlertView 替代品。
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));
}
输出 - - - - - - - -