É possível mostrar uma imagem no UIAlertView?

É possível adicionar imagem em um UIAlertView, como mostrar uma imagem do arquivo plist?

Você pode fazer como:

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

Isto irá adicionar uma imagem no canto direito da sua vista de alerta, você pode mudar a imagem do quadro para se movimentar.

Espero que isto ajude.

no iOS 7 ou superior, use este código

 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: quangminh@berrys.com\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]; 

Você precisará subclassificar o UIAlertView e reorganizar um pouco suas subvisualizações. Existem vários tutoriais para esse tipo de coisa:

  • UIAlertView personalizado (provavelmente o mais aplicável ao seu problema)
  • Custom UIAlertView com TableView (também muito útil)
 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]; 
 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: quangminh@berrys.com\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]; 

Eu fiz algumas modificações para a solução fornecida por Madhup.

A solução da Madhup funciona bem para mensagens curtas, no entanto, quando a mensagem é muito longa, a mensagem será coberta pela imagem.

Assim, eu adicionei as seguintes etapas no método de UIAlertViewDelegate – (void) willPresentAlertView: (UIAlertView *) alertView

  1. Adicione 8 “\ n” como prefixo da mensagem, para empurrar a mensagem para baixo, reservando espaço para a imagem (minha imagem estava restrita em 100×150)

  2. Detecte as subvisualizações do AlertView para descobrir se o UITextView existe.

    O UITextView existirá somente quando a mensagem for muito longa.

  3. Se o UITextView não existir, tudo ficará bem, imagem mostrada boa, mensagem mostrada boa.

  4. Se o UITextView existir, remova o prefixo 8 “\ n” do UITextView.text e, em seguida, chame UITextView.setFrame para resize e alterar a posição do UITextview.

A ação acima funciona bem.

Eu envio um NSDictionary como a mensagem a ser mostrada, o dictionary contém dois pares de valores-chave, “msg” => string de mensagem real. “url” => como a imagem do site.

Com o método sendSynchronousRequest da NSURLConnection, o código recuperará os dados da imagem da Internet no caminho.

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

Nota para IOS 7 e acima

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

Versão rápida:

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

Usando o layout puro:

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