Alterando a cor de fundo de um UIAlertView?

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

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

Eu também encontrei uma solução quase idêntica e, no meu caso, funciona melhor. Usando a saída de oxigênio, descobri um resultado ruim na canvas e o contexto fica embaçado. Em vez de subclassificar o UIAlertView, eu implemento:

 - (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 } 

Eu precisei recentemente disso e acabei subclassificando o UIAlertView. Aqui está o código para quem estiver interessado.

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

Bem, eu resolvi o problema de uma maneira diferente. Eu procurei pelo UIImageView que contém a imagem de fundo e mudo a imagem.

… bem show talvez não seja a melhor solução para alterar a visão …

 @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 

Aqui está uma solução muito mais recente que aproveita os blocos e é modelada após o TweetBot:

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

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

Você precisa criar sua própria visualização de tipo de alerta (incluindo a 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, de modo que a interface do usuário tenha uma percepção comum em todas as aplicações. Alterar a cor de aplicativo para aplicativo seria confuso para o usuário.

Adicione a estrutura QuartzCore ao aplicativo e inclua #import “QuartzCore / CALayer.h” no arquivo de origem.

Eu encontrei recentemente o GRAlertView, que permite que você personalize o UIAlertView de uma maneira fácil que pelo menos eu goste. Você encontra aqui: https://github.com/goncz9/GRAlertView

Você tem que usar isso:

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

isso mudará a cor de fundo do UIAlertView.

Basta usar esse 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]; 

Eu não acredito que exista um método exposto ou propriedade para fazer isso. Definir o backgroundColor do UIAlertView (como UIView) simplesmente coloca um pano de fundo retangular colorido atrás da visualização de alerta.

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