web-dev-qa-db-fra.com

Changer la couleur de fond d'un UIAlertView?

Je souhaite modifier la couleur d'arrière-plan de mon UIAlertView, mais cela ne semble pas avoir d'attribut de couleur.

38
Aishwarya

Le fond d’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]];
34
oxigen

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 ... il suffit de copier et coller

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

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

10
kwigbo

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 change 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
7
informatics

Voici une solution beaucoup plus récente qui tire parti des blocs et est calquée sur TweetBot: 

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

4
esilver

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.

3
August

Ajoutez la structure QuartzCore à l’application et incluez #import "QuartzCore/CALayer.h" dans le fichier source.

2
Vijay Shankar

J'ai récemment découvert GRAlertView, qui vous permet de personnaliser UIAlertView de la manière la plus simple qui soit. Vous le trouvez ici: https://github.com/goncz9/GRAlertView

1
PeterK

Cela ressemble à la solution la plus robuste pour moi

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

1
Luke

Vous devez utiliser ceci:

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

cela changera la couleur de fond de UIAlertView.

1
USK

Utilisez simplement ce code,

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