改变一个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后:
这不是可能的。
您可以创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中更改警报视图的背景颜色不同推荐的)。