我在iTunes商店有一个应用程序,在UILabel
上显示一些UIWebView
和UIAlertView
。根据会话视频,addSubView
的{{1}}将无效。他们谈过UIAlertView
。但是在GM种子SDK中,我找不到那个属性,似乎没有别的办法。
我唯一能做的就是创建ContentView
的自定义子类,使其像UIView
一样工作。你能建议任何其他简单的解决方案吗?
感谢您的帮助。
答案 0 :(得分:102)
您可以在iOS7中将 accessoryView 更改为 customContentView (在iOS8中也是如此)UIAlertView
[alertView setValue:customContentView forKey:@"accessoryView"];
试试这段代码:
UIAlertView *av = [[UIAlertView alloc] initWithTitle:@"TEST" message:@"subview" delegate:nil cancelButtonTitle:@"NO" otherButtonTitles:@"YES", nil];
UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 80, 40)];
[av setValue:v forKey:@"accessoryView"];
v.backgroundColor = [UIColor yellowColor];
[av show];
请记住,在调用 [alertView show]
之前,您需要设置自定义 accessoryView
答案 1 :(得分:10)
iOS 7无法使用AddSubview。
唯一的方法是创建一个可以充当UIAlertView的自定义UIView子类。我可以在Github上找到一些组件。
链接的Custom Alert似乎效果很好。通过进行适当的版本检查,可以识别出本机UIAlertView或CustomAlertView。
答案 2 :(得分:3)
在iOS7中添加子视图到UIAlertView
与早期的iOS版本不同。尝试这样的事情:
if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) {
[myAlertView setValue:myCustomView forKey:@"accessoryView"]; //works only in iOS7
} else {
myAlertView.message = @"\n"; //or just add \n to the end of the message (it's a workaround to create space inside the alert view
[myAlertView addSubview:myCustomView];
}
[myAlertView show]; //show the alert AFTER CUSTOMIZATION
答案 3 :(得分:-1)
如果你使用它,你也会得到帮助:)
syncProgressBarView = [[UIProgressView alloc]initWithProgressViewStyle:UIProgressViewStyleDefault];
syncProgressBarView.frame =CGRectMake(20, 55, 250, 20);
[syncProgressBarView setProgress:0.0f animated:NO];
syncProgressBarView.backgroundColor =[UIColor clearColor];
[progressView addSubview:syncProgressBarView];
为子视图UIProgressView
progressView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, DeviceWidth, 100)];
[[UIApplication sharedApplication].keyWindow addSubview:progressView];
progressView.backgroundColor = [UIColor clearColor];
progressView.center = [UIApplication sharedApplication].keyWindow.center;
syncProgressBarView.frame = CGRectMake(progressView.frame.size.width/2 - 250/2, progressView.frame.size.height/2 - 10, 250, 20);
[[UIApplication sharedApplication].keyWindow bringSubviewToFront:[progressView superview]];
你还有一件事要做......
dispatch_async(dispatch_get_main_queue(), ^{
[self updateProgressBar];
});
答案 4 :(得分:-2)
在接受的答案中链接的github上的自定义警报视图很棒。但是,您无法直接从viewdidload方法启动它。封闭的UIView附加到应用程序的第一个窗口,因此您必须等待一瞬间。我将此代码添加到viewdidload,我发现这是一个封闭的问题。
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.5f * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
// Open the dialog here
});
答案 5 :(得分:-9)
解决方案是将UIAlertView子类化并检测“_UIModalItemAlertContentView”视图。 我的AlertView有一个UITextField,所以我用它来检测内容视图:
- (void)show
{
[ super show ];
UIView *contentView=nil;
if([[[UIDevice currentDevice] systemVersion] floatValue ] < 7.0f)
{
contentView=self;
} else {
UIView *rootView=[self textFieldAtIndex:0];
while((rootView=[rootView superview])!=nil)
{
if([ NSStringFromClass([rootView class]) isEqualToString:@"_UIModalItemAlertContentView"])
{
contentView=rootView;
break;
}
}
}
if(contentView!=nil)
{
[ contentView addSubview: ... ];
}
}