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