我想更改 UIAlertView 的背景颜色,但这似乎没有颜色属性。
12 回答
AlertView 的背景是图像,您可以更改此图像
UIAlertView *theAlert = [[[UIAlertView alloc] initWithTitle:@"Atention"
message: @"YOUR MESSAGE HERE", nil)
delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] autorelease];
[theAlert show];
UILabel *theTitle = [theAlert valueForKey:@"_titleLabel"];
[theTitle setTextColor:[UIColor redColor]];
UILabel *theBody = [theAlert valueForKey:@"_bodyTextLabel"];
[theBody setTextColor:[UIColor blueColor]];
UIImage *theImage = [UIImage imageNamed:@"Background.png"];
theImage = [theImage stretchableImageWithLeftCapWidth:16 topCapHeight:16];
CGSize theSize = [theAlert frame].size;
UIGraphicsBeginImageContext(theSize);
[theImage drawInRect:CGRectMake(0, 0, theSize.width, theSize.height)];
theImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[[theAlert layer] setContents:[theImage CGImage]];
我还找到了一个几乎相同的解决方法,就我而言,它效果更好。使用 oxigen 出路我发现屏幕上的结果很差,并且上下文变得模糊。而不是子类化 UIAlertView 我实现:
- (void)willPresentAlertView:(UIAlertView *)alertView;
所以...只需复制和粘贴
- (void)willPresentAlertView:(UIAlertView *)alertView
{
blah blah blah...
[[alertView layer] setContents:(id)theImage.CGImage]; // to avoid the warning
}
我最近需要这个并最终继承了 UIAlertView。这是任何有兴趣的人的代码。
http://kwigbo.com/post/318396305/iphone-sdk-custom-uialertview-background-color
好吧,我以不同的方式解决了这个问题。我搜索了包含背景图像的 UIImageView 并更改了图像。
......好吧,展示可能不是改变视图的最佳解决方案......
@implementation CustomAlertView
- (void)show {
[super show];
for (UIView *view in self.subviews) {
NSLog(@"%@ with %i children", view, [view.subviews count]);
// change the background image
if ([view isKindOfClass:[UIImageView class]]) {
UIImage *theImage = [UIImage imageNamed:@"password entry bg - default.png"];
((UIImageView *)view).image = [theImage resizableImageWithCapInsets:UIEdgeInsetsMake(49, 8, 8, 8)];
}
}
}
@end
这是一个更新的解决方案,它利用了块并以 TweetBot 为模型:
这不是可能的事情。
要么您需要创建自己的警报类型视图(包括提供动画等),要么使用 Apple 提供的默认 UIAlertView。
Apple 倾向于不公开诸如 UIAlertView 的颜色之类的东西,以便 UI 在所有应用程序中具有共同的感觉。将颜色从应用程序更改为应用程序会使用户感到困惑。
将 QuartzCore 框架添加到应用程序并在源文件中包含 #import "QuartzCore/CALayer.h"。
我最近发现了 GRAlertView,它允许您以至少我喜欢的简单方式定制 UIAlertView。你在这里找到它:https ://github.com/goncz9/GRAlertView
你必须使用这个:
UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"You are Select Row of" message:@"Human" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
alert.backgroundColor=[UIColor redColor];
[alert show];
[alert release];
它会改变 UIAlertView 的背景颜色。
只需使用此代码,
UIImage *theImage = [UIImage imageNamed:@"imageName.png"];
UIView *view=[alert valueForKey:@"_backgroundImageView"];
//Set frame according to adustable
UIImageView *image=[[UIImageView alloc] initWithImage:theImage];
[image setFrame:CGRectMake(0, 0, 280, 130)];
[view addSubview:image];
我不相信有这样做的公开方法或属性。设置 UIAlertView 的 backgroundColor(作为 UIView)只是在警报视图后面放置一个彩色矩形背景。
我会说它可能会违背 iPhone 的通用界面来改变这种颜色,所以我不认为这是推荐的行为(就像在 Mac OS X 中改变警报视图的背景颜色一样推荐的)。