I want to change the background color of my UIAlertView, but this doesn't appear to have a color attribute.
I don't believe that there is an exposed method or property for doing this. Setting the backgroundColor of the UIAlertView (as a UIView) merely puts a colored rectangular backdrop behind the alert view.
I'd say that it would probably go against the common interface of the iPhone to alter this color, so I don't think it's recommended behavior (in the same way that changing the background color of an alert view in Mac OS X is not recommended).
This is not something that is possible.
Either you need to create your own alert-type view (including providing the animation, etc.) or use the default UIAlertView supplied by Apple.
Apple tends to not expose things like the color of the UIAlertView so that the UI has a common feel across all applictions. Changing the color from app to app would be confusing to the user.
Background of AlertView is an image And you can change this image
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]];
To add to oxigen's post (how do I add a comment to a post, can't seem to find a button to do that), if you don't want a warning, change the last line to:
alert.layer.contents = (id)[theImage CGImage];
I've also find an almost identical workaround and, in my case, it works better. Using oxigen way out i've discovered a poor result on the screen and the context get blurred. Rather than subclassing UIAlertView I implement:
- (void)willPresentAlertView:(UIAlertView *)alertView
so...just copy & paste
(void)willPresentAlertView:(UIAlertView *)alertView {
blah blah blah...
[[alertView layer] setContents:(id)theImage.CGImage]; // to avoid the warning }
The last line of the code:
[[theAlert layer] setContents:[theImage CGImage]];
Creates the following warning in xcode:
warning: no '-setContents:' method found
Is this something I should just ignore because this isn't really a "supported" method? Or is it something that has changed in recent SDK?
Add QuartzCore framework to the application and include #import "QuartzCore/CALayer.h" in the source file.
I recently needed this and ended up subclassing UIAlertView. Here is the code for anyone who is interested.
http://kwigbo.com/post/318396305/iphone-sdk-custom-uialertview-background-color