Je souhaite modifier la couleur d'arrière-plan de mon UIAlertView, mais celui-ci ne semble pas avoir d'attribut de couleur.
Réponses
Trop de publicités?Le fond de AlertView est une image Et vous pouvez changer cette 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]];
J'ai également trouvé une solution de contournement presque identique et, dans mon cas, cela fonctionne mieux. En utilisant oxigen way out, j'ai découvert un résultat médiocre à l'écran et le contexte est devenu flou. Plutôt que de sous-classer UIAlertView, j'implémente:
- (void)willPresentAlertView:(UIAlertView *)alertView;
alors ... juste copier et coller
- (void)willPresentAlertView:(UIAlertView *)alertView
{
blah blah blah...
[[alertView layer] setContents:(id)theImage.CGImage]; // to avoid the warning
}
J'ai récemment eu besoin de cela et j'ai fini par classer UIAlertView. Voici le code pour quiconque est intéressé.
http://kwigbo.com/post/318396305/iphone-sdk-custom-uialertview-background-color
Eh bien, j'ai résolu le problème d'une manière différente. J'ai cherché le UIImageView qui contient l'image de fond et changer l'image.
... eh bien, le spectacle n'est peut-être pas la meilleure solution pour modifier la vue ...
@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
Ce n'est pas quelque chose qui est possible.
Vous devez soit créer votre propre vue de type alerte (y compris en fournissant l'animation, etc.), soit utiliser la vue UIAlertView par défaut fournie par Apple.
Apple a tendance à ne pas exposer des éléments tels que la couleur de UIAlertView afin que l’interface utilisateur ait la même impression dans toutes les applications. Changer la couleur d'une application à une autre serait source de confusion pour l'utilisateur.