更改UIAlertView的背景颜色?

时间:2009-05-19 14:43:07

标签: iphone objective-c cocoa-touch uikit uialertview

我想更改UIAlertView的背景颜色,但这似乎没有颜色属性。

12 个答案:

答案 0 :(得分:34)

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]];

答案 1 :(得分:13)

我也发现了一个几乎相同的解决方法,在我看来,它的效果更好。使用oxigen方式我发现屏幕上的结果很差,上下文变得模糊。而不是子类化UIAlertView我实现:

- (void)willPresentAlertView:(UIAlertView *)alertView;

所以...只是复制&糊

- (void)willPresentAlertView:(UIAlertView *)alertView 
{
    blah blah blah...
    [[alertView layer] setContents:(id)theImage.CGImage];  // to avoid the warning
}

答案 2 :(得分:10)

我最近需要这个并最终继承了UIAlertView的子类。以下是感兴趣的人的代码。

http://kwigbo.com/post/318396305/iphone-sdk-custom-uialertview-background-color

答案 3 :(得分:7)

我用不同的方式解决了这个问题。我搜索了包含背景图像的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

答案 4 :(得分:4)

这是一个利用块的更新的解决方案,并以TweetBot为模型:

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

答案 5 :(得分:3)

这不可能。

您需要创建自己的警报类型视图(包括提供动画等)或使用Apple提供的默认UIAlertView。

Apple倾向于不公开UIAlertView的颜色等内容,以便UI在所有应用程序中都有共同的感觉。将颜色从应用程序更改为应用程序会让用户感到困惑。

答案 6 :(得分:2)

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

答案 7 :(得分:1)

你必须使用它:

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的背景颜色。

答案 8 :(得分:1)

答案 9 :(得分:1)

我最近发现了GRAlertView,它允许你以一种至少我喜欢的简单方式定制UIAlertView。你可以在这里找到它:https://github.com/goncz9/GRAlertView

答案 10 :(得分:0)

只需使用此代码,

 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];

答案 11 :(得分:-2)

我不相信这样做有暴露的方法或属性。设置UIAlertView的backgroundColor(作为UIView)只是在警报视图后面放置一个彩色矩形背景。

我会说它可能会违反iPhone的通用界面来改变这种颜色,所以我不认为这是推荐的行为(就像改变Mac OS中警报视图的背景颜色一样)不建议使用X。