38

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

4

12 回答 12

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]];
于 2009-05-19T15:08:32.097 回答
13

我还找到了一个几乎相同的解决方法,就我而言,它效果更好。使用 oxigen 出路我发现屏幕上的结果很差,并且上下文变得模糊。而不是子类化 UIAlertView 我实现:

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

所以...只需复制和粘贴

- (void)willPresentAlertView:(UIAlertView *)alertView 
{
    blah blah blah...
    [[alertView layer] setContents:(id)theImage.CGImage];  // to avoid the warning
}
于 2009-09-25T18:26:58.463 回答
10

我最近需要这个并最终继承了 UIAlertView。这是任何有兴趣的人的代码。

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

于 2010-01-08T13:52:16.813 回答
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
于 2011-12-28T10:08:56.033 回答
4

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

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

于 2012-02-23T06:42:45.420 回答
3

这不是可能的事情。

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

Apple 倾向于不公开诸如 UIAlertView 的颜色之类的东西,以便 UI 在所有应用程序中具有共同的感觉。将颜色从应用程序更改为应用程序会使用户感到困惑。

于 2009-01-24T18:40:51.397 回答
2

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

于 2009-12-14T13:02:28.617 回答
1

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

于 2013-03-20T20:45:56.700 回答
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 的背景颜色。

于 2012-04-23T12:34:02.013 回答
1

这对我来说似乎是最强大的解决方案

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

于 2013-02-07T09:22:30.343 回答
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];
于 2013-02-20T07:29:25.100 回答
-3

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

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

于 2009-01-24T17:09:53.813 回答