是否有可能在UIAlertView中显示图像?
是否有可能在UIAlertView中添加图像,如显示来自plist文件的图像?
你可以这样做:
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]; [bkgImg release]; [path release]; [successAlert addSubview:imageView]; [imageView release]; [successAlert show]; [successAlert release];
这将在你的alertview的右angular添加一个图像,你可以改变帧图像来移动。
希望这可以帮助。
在iOS 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: 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];
你需要子类UIAlertView并重新排列其子视图。 有几个教程这种东西:
- 自定义UIAlertView (可能是最适用于您的问题)
- 自定义UIAlertView w / TableView (也非常方便)
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];
我对Madhup提供的解决scheme做了一些修改。
Madhup的解决scheme适用于短消息,但是当消息太长时,消息将被图像覆盖。
因此,我在UIAlertViewDelegate方法中添加了以下步骤 – (void)willPresentAlertView:(UIAlertView *)alertView
-
添加8“\ n”作为邮件的前缀,向下推送邮件,为图片保留空间(我的图片被限制在100×150)
-
检测AlertView的子视图,以确定UITextView是否存在。
只有当消息太长时,UITextView才会存在。
-
如果UITextView不存在,一切都会好的,图像显示不错,信息显示良好。
-
如果UITextView存在,请从UITextView.text中删除8前缀“\ n”,然后调用UITextView.setFrameresize并更改UITextview的位置。
以上的行动工作正常。
我发送一个NSDictionary作为要显示的消息,该字典包含2个键值对,“msg”=>真正的消息string。 “url”=>作为来自网站的图像。
使用NSURLConnection sendSynchronousRequest方法,代码将在途中从Internet上检索图像数据。
- (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]; } } } }
注意IOS 7及以上
if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) { [alert setValue:imageView forKey:@"accessoryView"]; }else{ [alert addSubview:imageView]; }
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()
使用纯布局窗格:
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];