Изменение цвета фона UIAlertView? - PullRequest
38 голосов
/ 19 мая 2009

Я хочу изменить цвет фона моего UIAlertView, но у него нет атрибута цвета.

Ответы [ 12 ]

34 голосов
/ 19 мая 2009

Фон AlertView - это изображение И вы можете изменить это изображение

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]];
13 голосов
/ 25 сентября 2009

Я также нашел почти идентичный обходной путь, и в моем случае он работает лучше. Используя выход кислорода, я обнаружил плохой результат на экране, и контекст стал размытым. Вместо того, чтобы создавать подклассы UIAlertView, я реализую:

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

так что ... просто скопируйте и вставьте

- (void)willPresentAlertView:(UIAlertView *)alertView 
{
    blah blah blah...
    [[alertView layer] setContents:(id)theImage.CGImage];  // to avoid the warning
}
10 голосов
/ 08 января 2010

Я недавно нуждался в этом и в итоге получил подкласс UIAlertView. Вот код для тех, кто заинтересован.

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

7 голосов
/ 28 декабря 2011

Ну, я решил проблему по-другому. Я искал UIImageView, который содержит фоновое изображение и изменил изображение.

... хорошо, шоу, возможно, не лучшее решение для изменения вида ...

@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
4 голосов
/ 23 февраля 2012

Вот гораздо более свежее решение, которое использует преимущества блоков и смоделировано после TweetBot:

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

3 голосов
/ 24 января 2009

Это не то, что возможно.

Либо вам нужно создать собственное представление типа оповещения (включая предоставление анимации и т. Д.), Либо использовать UIAlertView по умолчанию, предоставляемый Apple.

Apple, как правило, не раскрывает такие вещи, как цвет UIAlertView, чтобы пользовательский интерфейс был единым для всех приложений. Изменение цвета от приложения к приложению может сбить пользователя с толку.

2 голосов
/ 14 декабря 2009

Добавьте платформу QuartzCore в приложение и включите #import "QuartzCore / CALayer.h" в исходный файл.

1 голос
/ 21 марта 2013

Недавно я нашел GRAlertView, который позволяет вам легко адаптировать UIAlertView, по крайней мере, мне нравится. Вы найдете это здесь: https://github.com/goncz9/GRAlertView

1 голос
/ 07 февраля 2013

Это выглядит как самое надежное решение для меня

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

1 голос
/ 23 апреля 2012

Вы должны использовать это:

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

это изменит цвет фона UIAlertView.

...