是否可以在UIAlertView中显示图像?

时间:2010-02-24 03:49:20

标签: objective-c iphone uialertview

是否可以在UIAlertView中添加图像,例如显示plist文件中的图像?

9 个答案:

答案 0 :(得分: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];

这将在警报视图的右上角添加图像,您可以更改框架图像以移动。

希望这有帮助。

答案 1 :(得分:10)

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

答案 2 :(得分:5)

您需要将UIAlertView子类化并稍微重新排列其子视图。这种东西有几个教程:

答案 3 :(得分: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];

答案 4 :(得分: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: 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];

答案 5 :(得分:0)

我对Madhup提供的解决方案进行了一些修改。

Madhup的解决方案适用于短信,但是, 当消息太长时,消息将被图像覆盖。

因此,我在UIAlertViewDelegate的方法中添加了以下步骤 - (void)willPresentAlertView:(UIAlertView *)alertView

  1. 添加8“\ n”作为邮件前缀,将邮件推送下来, 保留图像空间(我的图像限制在100x150)

  2. 检测AlertView的子视图,以查明是否存在UITextView。

    只有当邮件太长时才会存在UITextView。

  3. 如果UITextView不存在,一切都会好,图像 显示良好,信息显示良好。

  4. 如果UITextView存在,请从UITextView.text中删除8前缀“\ n”, 然后调用UITextView.setFrame来调整大小并更改UITextview的位置。

  5. 上述行动正常。

    我发送一个NSDictionary作为要显示的消息,该字典包含2个键值对,“msg”=>真正的消息字符串。 “url”=>作为网站上的图片。

    使用NSURLConnection sendSynchronousRequest方法,代码将在途中从互联网上检索图像数据。

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

答案 6 :(得分:0)

IOS 7及以上的注释

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

答案 7 :(得分: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()

答案 8 :(得分:-1)

使用纯布局窗格:

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