2010-02-24 2 views

ответ

42

Вы можете сделать это:

UIAlertView *successAlert = [[UIAlertView alloc] initWithTitle:title message:message delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 

    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(220, 10, 40, 40)]; 

    NSString *path = [[NSString alloc] initWithString:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"smile.png"]]; 
    UIImage *bkgImg = [[UIImage alloc] initWithContentsOfFile:path]; 
    [imageView setImage:bkgImg]; 

    [successAlert addSubview:imageView]; 

    [successAlert show]; 

Это добавит изображение в правом углу вашего предупреждения, вы можете изменить изображение рамки для перемещения.

Надеюсь, это поможет.

+0

работает отлично .. спасибо! но если я сместил изображение в центр, он будет заблокирован сообщением. Как я могу сделать это таким образом, чтобы изображение находилось в центре, а ниже изображения было сообщение? – summer

+0

Единственное, что вы можете сделать, это добавить еще одну метку для сообщения и добавить \ n \ n \ n ... в конце заголовка. Это единственный способ узнать, что не использует не документированные функции. –

+1

Будет ли яблоко одобрять приложение, если вы добавите изображения в UIAlertView? – Illep

5

Вам нужно подклассифицировать UIAlertView и немного перестроить его подпрограммы. Есть несколько учебных пособий для такого рода вещь:

+1

Но я думаю, что переставлять подвидов может привести к отказу приложения. –

+0

Первая ссылка не работает. –

0

Я сделал некоторые изменения для решения, предоставленного Madhup.

Решение от Madhup отлично работает для короткого сообщения, однако , когда сообщение слишком длинное, сообщение будет покрыто изображением.

Таким образом, я добавил следующие шаги в методе UIAlertViewDelegate - (Недействительными) willPresentAlertView: (UIAlertView *) alertView

  1. Добавить 8 "\ п" в качестве префикса сообщения, чтобы подтолкнуть сообщение вниз , резервирование места для изображения (мое изображение было ограничено в 100x150)

  2. Обнаружить подпункты AlertView, чтобы узнать, существует ли UITextView.

    UITextView будет существовать только в том случае, если сообщение слишком длинное.

  3. Если UITextView не существует, все будет хорошо, изображение показано хорошо, сообщение показано хорошо.

  4. Если UITextView существует, удалите 8 префикс «\ n» из UITextView.text, , а затем вызовите UITextView.setFrame для изменения размера и изменения положения UITextview.

Вышеуказанное действие работает нормально.

Я отправляю NSDictionary как отображаемое сообщение, словарь содержит 2 пары ключ-значение, "msg" => настоящую строку сообщения. "url" => как изображение с веб-сайта.

С помощью метода sendSynchronousRequest NSURLConnection код будет извлекать данные изображения из Интернета по пути.

- (void)showAlertView:(NSDictionary *)msgDic { 
    NSLog(@"msgDic = %@", msgDic); 
    NSMutableString *msg = [[NSMutableString alloc] initWithString:@"\n\n\n\n\n\n\n\n"]; 
    if ([msgDic objectForKey:@"msg"]) { 
     [msg appendFormat:@"%@", [msgDic objectForKey:@"msg"]]; 
    } 
    else { 
     [msg setString:[msgDic objectForKey:@"msg"]]; 
    } 

    NSLog(@"msg = %@", msg); 
    UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Alert Title" 
               message:msg 
               delegate:self 
            cancelButtonTitle:@"Close" otherButtonTitles:nil]; 

    if ([msgDic objectForKey:@"url"]) { 
     NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:[msgDic objectForKey:@"url"]]]; 
     [request setCachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData]; 

     NSData *imgData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 
     if (imgData) { 
      UIImage *shownImage = [UIImage imageWithData:imgData]; 
      UIImageView *imgView = [[UIImageView alloc] initWithImage:shownImage]; 
      [imgView setFrame:CGRectMake(floor(284-100)/2.0, 47, 100, 150)]; 

      [alert addSubview:imgView]; 
      [imgView release]; 
     } 
    } 

    alert.delegate = self; 
    [alert show]; 
    [alert release]; 
    [msgDic release]; 
} 

- (void)willPresentAlertView:(UIAlertView *)alertView { 
int viewCount = [alertView.subviews count]; 

    NSLog(@"subviews count = %i", viewCount); 

    if (viewCount > 0) { 
     BOOL bFoundTextView = NO; 
     for (int count=0; count<=[alertView.subviews count] -1; count++) { 
      BOOL bIsTextView = NO; 
      UIView *subView = [alertView.subviews objectAtIndex:count]; 
      NSLog(@"view index %i classname = %@", count, [[subView class] description]); 

      bIsTextView = [[[subView class] description] isEqualToString:@"UIAlertTextView"]; 
      bFoundTextView |= bIsTextView; 

      if (bIsTextView) { 
       UITextView *textView = (UITextView *)subView; 
       NSMutableString *msg = [[NSMutableString alloc] initWithString:textView.text]; 
       [msg setString:[msg substringFromIndex:8]]; 
       textView.text = msg; 

       CGRect frame = textView.frame; 
       if (frame.origin.y != 205) { 
        frame.origin.y = 205; 
        frame.size.height -= 155; 
        [textView setFrame:frame]; 
       } 

       [msg release]; 
      } 
     }   
    } 
} 
5
UIAlertView *Alert = [[UIAlertView alloc] initWithTitle:@"your Title" message:@"Your Message" delegate:nil cancelButtonTitle:@"Your Title" otherButtonTitles:nil]; 

UIImageView *image = [[UIImageView alloc] initWithFrame:CGRectMake(0,0, 40, 40)]; 

NSString *loc = [[NSString alloc] initWithString:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Your Image Name"]]; 
UIImage *img = [[UIImage alloc] initWithContentsOfFile:loc]; 
[image setImage:img]; 

if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) { 
    [Alert setValue:image forKey:@"accessoryView"]; 
}else{ 
    [Alert addSubview:image]; 
} 

[Alert show]; 
+0

http://stackoverflow.com/questions/18729220/uialertview-addsubview-in-ios7 – user3182143

+0

[alertView setValue: imageView forKey: @ "accessoryView"]; – user3182143

+0

[action setValue: принадлежностиImage forKey: @ "image"]; – user3182143

0

Примечание для IOS 7 и выше

if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) { 
    [alert setValue:imageView forKey:@"accessoryView"]; 
}else{ 
    [alert addSubview:imageView]; 
} 
9

в прошивке 7 или выше, использовать этот код

UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 200, 282)]; 
UIImage *wonImage = [UIImage imageNamed:@"iberrys.png"]; 
imageView.contentMode=UIViewContentModeCenter; 
[imageView setImage:wonImage]; 
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Arirang List" 
                message:@"phiên bản: 1.0\n website: www.iberrys.com\n email: [email protected]\nmobile: 0918 956 456" 
                delegate:self 
              cancelButtonTitle:@"Đồng ý" 
              otherButtonTitles: nil]; 
//check if os version is 7 or above 
if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) { 
    [alertView setValue:imageView forKey:@"accessoryView"]; 
}else{ 
    [alertView addSubview:imageView]; 
} 
[alertView show]; 
+0

@QuangMing ваш кодовый вызов UIAlertview 2 раза. И я не понимаю, почему? – Muju

0

Swift версию:

let alertView = UIAlertView(title: "Alert", message: "Alert + Image", delegate: nil, cancelButtonTitle: "OK") 
    let imvImage = UIImageView(frame: CGRect(x: 0, y: 0, width: 100, height: 100)) 
    imvImage.contentMode = UIViewContentMode.Center 
    imvImage.image = UIImage(named: "image_name") 
    alertView.setValue(imvImage, forKey: "accessoryView") 
    alertView.show() 
+0

Как настроить размер вида предупреждения или аксессуара? Если я использую вышеуказанный код, предупреждение отображается для полного размера – AAA

+0

по умолчанию, они не предоставляют какой-либо способ его настройки. Если вы хотите гораздо больше пользовательских, вы должны создать настраиваемый контроллер предупреждений. (это подкласс класса uiviewcontroller) –

0

Использование чистого макета стручка:

UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Hello" 
                     message:nil 
                    preferredStyle:UIAlertControllerStyleAlert]; 
UIImage *image = // target image here; 
CGSize size = image.size; 
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(leftMargin, topMargin, size.width, size.height)]; 
imageView.image = image; 
[alertController.view addSubview:imageView]; 
[imageView autoPinEdgeToSuperviewEdge:ALEdgeLeft withInset:leftMargin]; 
[imageView autoPinEdgeToSuperviewEdge:ALEdgeTop withInset:topMargin]; 
[imageView autoPinEdgeToSuperviewEdge:ALEdgeRight withInset:rightMargin]; 
[imageView autoPinEdgeToSuperviewEdge:ALEdgeBottom withInset:bottomMargin]; 
[imageView autoSetDimension:ALDimensionWidth toSize:size.width]; 
[imageView autoSetDimension:ALDimensionHeight toSize:size.height]; 
// add desired actions here 
[self presentViewController:alertController animated:YES completion:nil]; 
2
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 200, 282)]; 
UIImage *wonImage = [UIImage imageNamed:@"iberrys.png"]; 
imageView.contentMode = UIViewContentModeCenter; 
[imageView setImage:wonImage]; 
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Arirang List" 
                message:@"phiên bản: 1.0\n website: www.iberrys.com\n email: [email protected]\nmobile: 0918 956 456" 
                delegate:self 
              cancelButtonTitle:@"Đồng ý" 
              otherButtonTitles:nil]; 
//check if os version is 7 or above 
if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) { 
    [alertView setValue:imageView forKey:@"accessoryView"]; 
} else { 
    [alertView addSubview:imageView]; 
} 
[alertView show]; 
Смежные вопросы