Alterar a cor de um UIAlertView fundo?

votos
37

Eu quero mudar a cor do meu UIAlertView fundo, mas isso não parece ter um atributo de cor.

Publicado 19/05/2009 em 15:43
fonte usuário
Em outras línguas...                            


12 respostas

votos
33

Fundo de AlertView é uma imagem e você pode mudar esta imagem

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]];
Respondeu 19/05/2009 em 16:08
fonte usuário

votos
12

Eu também encontrar uma solução quase idênticos e, no meu caso, ele funciona melhor. Usando oxigênio caminho eu descobri um mau resultado na tela eo contexto ficar turva. Ao invés de subclassificação UIAlertView I implementar:

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

então ... basta copiar e colar

- (void)willPresentAlertView:(UIAlertView *)alertView 
{
    blah blah blah...
    [[alertView layer] setContents:(id)theImage.CGImage];  // to avoid the warning
}
Respondeu 25/09/2009 em 19:26
fonte usuário

votos
10

Recentemente precisava disso e acabou subclasse UIAlertView. Aqui está o código para qualquer um que esteja interessado.

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

Respondeu 08/01/2010 em 14:52
fonte usuário

votos
7

Bem, eu resolvi o problema de uma maneira diferente. Procurei o UIImageView que contém a imagem de fundo e mudar a imagem.

... bem show não é talvez a melhor solução para alterar a vista ...

@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
Respondeu 28/12/2011 em 11:08
fonte usuário

votos
4

Aqui está uma solução muito mais recente que tira proveito de blocos e é modelado após TweetBot:

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

Respondeu 23/02/2012 em 07:42
fonte usuário

votos
3

Isso não é algo que é possível.

Ou você precisa para criar o seu próprio ponto de vista do tipo de alerta (incluindo o fornecimento de animação, etc.) ou usar o UIAlertView padrão fornecido pela Apple.

A Apple tende a não expor coisas como a cor do UIAlertView para que a interface do usuário tem uma sensação comum em todos applictions. Mudando a cor do aplicativo para aplicativo seria confuso para o usuário.

Respondeu 24/01/2009 em 19:40
fonte usuário

votos
2

Adicionar quadro QuartzCore à aplicação e incluem #import "QuartzCore / CALayer.h" no arquivo de origem.

Respondeu 14/12/2009 em 14:02
fonte usuário

votos
1

Eu encontrei recentemente o GRAlertView, que lhe permitem adaptar UIAlertView de uma maneira fácil que pelo menos eu gosto. Você encontrá-lo aqui: https://github.com/goncz9/GRAlertView

Respondeu 20/03/2013 em 21:45
fonte usuário

votos
1

Este parece ser a solução mais robusta para mim

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

Respondeu 07/02/2013 em 10:22
fonte usuário

votos
0

Basta usar este código,

 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];
Respondeu 20/02/2013 em 08:29
fonte usuário

votos
0

Você tem que usar isto:

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

ele vai mudou a cor de UIAlertView fundo.

Respondeu 23/04/2012 em 13:34
fonte usuário

votos
-2

Eu não acredito que há um método exposta ou propriedade para fazer isso. Definir o backgroundColor do UIAlertView (como um UIView) simplesmente coloca um pano de fundo retangular de cor por trás da exibição de alerta.

Eu diria que ele provavelmente iria contra a interface comum do iPhone para alterar esta cor, então eu não acho que é o comportamento recomendado (da mesma forma que a mudança da cor de uma exibição de alerta no Mac OS X de fundo não é recomendado).

Respondeu 24/01/2009 em 18:09
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more