改变一个UIAlertView的背景颜色?

我想改变我的UIAlertView的背景颜色,但是这看起来没有颜色属性。

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的方式,我发现在屏幕上的结果很差,上下文变得模糊。 而不是inheritance我实现的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

那么我以不同的方式解决了这个问题。 我search了包含背景图像的UIImageView并更改图像。

…显示也许不是改变视图的最佳解决scheme…

 @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 

这是一个更近期的解决scheme,利用块,并build模TweetBot后:

https://github.com/Arrived/BlockAlertsAnd-ActionSheets

这不是可能的。

您可以创build自己的警报types视图(包括提供animation等),也可以使用Apple提供的默认UIAlertView。

苹果往往不会像UIAlertView的颜色那样暴露,所以UI在所有应用程序中都有一个共同的感觉。 从应用程序更改颜色应用程序会混淆用户。

将QuartzCore框架添加到应用程序中,并在源文件中包含#import“QuartzCore / CALayer.h”。

这看起来像对我来说最强大的解决scheme

http://mobile.tutsplus.com/tutorials/iphone/ios-sdk-uialertview-custom-graphics/

我最近find了GRAlertView,它可以让你以一种简单的方式定制UIAlertView,至less我喜欢。 你可以在这里find它: 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中更改警报视图的背景颜色不同推荐的)。