Пользовательский AlertView с фоном - PullRequest
3 голосов
/ 14 июля 2011

Всем, мне нужно установить одно изображение в UIAlertView ..

enter image description here

Я прикрепил свой UIAlertview к изображению prob ..

Я использовал этострочки кода ..

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

пожалуйста, решите эту проблему .. мне нужно только изображение с предупреждением ..

Ответы [ 3 ]

6 голосов
/ 14 июля 2011

Попробуйте это ...

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"UIAlert View" message:@"hello" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:@"Close",nil];

UIImage *alertImage = [UIImage imageNamed:@"plus.png"];

UIImageView *backgroundImageView = [[UIImageView alloc] initWithImage:alertImage];

backgroundImageView.frame = CGRectMake(0, 0, 282, 130);

backgroundImageView.contentMode = UIViewContentModeScaleToFill;

[alert addSubview:backgroundImageView];

[alert sendSubviewToBack:backgroundImageView]; 
[alert show];
[alert release];
4 голосов
/ 14 июля 2011

Вы должны рассмотреть возможность не использовать UIAlertView, но иметь свой собственный AlertView, см. TSAlertView для альтернативной реализации, которая не является производной от UIAlertView.

TSAlertView позволяет вам устанавливать свой собственныйbackground image.


Другое решение , которое я не рекомендую , может быть:

Вы можете использовать introspection : зацикливание на подпредставлениях UIAlertViewsопределите тот, который содержит фоновое изображение, установите его скрытым и поместите ваше собственное фоновое изображение в индекс ниже / выше исходного изображения.


Я нашел этот проект: Подкласс UIAlertView для настройкивид оповещения .Он не работает для iOS 4.2+, но с моей идеей самоанализа вы можете заставить его работать снова:

измените -layoutSubviews из JKCustomAlert на:

- (void) layoutSubviews {
    for (UIView *v in [self subviews]) {
        if ([v class] == [UIImageView class]) {
            [v setHidden:YES];
        }
    }
    alertTextLabel.transform = CGAffineTransformIdentity;
    [alertTextLabel sizeToFit];

    CGRect textRect = alertTextLabel.frame;
    textRect.origin.x = (CGRectGetWidth(self.bounds) - CGRectGetWidth(textRect)) / 2;
    textRect.origin.y = (CGRectGetHeight(self.bounds) - CGRectGetHeight(textRect)) / 2;
    textRect.origin.y -= 30.0;

    alertTextLabel.frame = textRect;

    alertTextLabel.transform = CGAffineTransformMakeRotation(- M_PI * .08);
}

Я НЕ обещаю, что этот трюк будет работать в будущих версиях iOS

0 голосов
/ 06 июня 2015

Решением, которое я хотел бы использовать для этого, является добавление UIView в ViewController, который имитирует появление предупреждения.Другое свойство UIAlertView - то, что никакая другая часть приложения не может использоваться, пока предупреждение не отклонено.Это можно легко имитировать, сделав свой UIView подпредставлением другого UIView (с четким фоном), который занимает весь экран.

Если вы не хотите реализовывать это самостоятельно, вот представление Custom Alert View.класс, который вы можете использовать: https://github.com/shivsak/CustomAlertView

...