How to add UIImageView in UIAlertController?

前端 未结 3 802
情深已故
情深已故 2020-12-31 19:45

I want UIAlertController to present an alert with UIImageView in an ActionSheet. But when I run the application it is terminating.

相关标签:
3条回答
  • 2020-12-31 20:22

    It is not possible to add an image to a UIAlertController according to Apple Doc.

    if you want then you can create your own custom view like:

    https://github.com/wimagguc/ios-custom-alertview

    If you want to take image appear on button then Try like this:

    UIAlertController * alert = [UIAlertController alertControllerWithTitle:@"Title"
                                  message:@"Welcome"
                                  preferredStyle:UIAlertControllerStyleActionSheet];
    
    UIAlertAction* okButton = [UIAlertAction actionWithTitle:@"OK"
                                style:UIAlertActionStyleCancel
                                handler:^(UIAlertAction * action) {
                                  //Do some thing here
                                }];
    
    [okButton setValue:[[UIImage imageNamed:@"kaga.jpg"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] forKey:@"image"];
    
    [alert addAction:okButton];
    [self presentViewController:alert animated:YES completion:nil];
    
    0 讨论(0)
  • 2020-12-31 20:29

    You could add an image above the title label by subclassing UIAlertController and adding \n to the title string to make space for the UIImageView. You'd have to compute the layout based on the font size. For images in the UIAlertAction use KVC like so: self.setValue(image, forKey: "image"). I would recommend to use an extension that checks for responds(to:).

    Here is sample implementation.

    extension UIAlertAction {
    
        /// Image to display left of the action title
        var actionImage: UIImage? {
            get {
                if self.responds(to: Selector(Constants.imageKey)) {
                    return self.value(forKey: Constants.imageKey) as? UIImage
                }
                return nil
            }
            set {
                if self.responds(to: Selector(Constants.imageKey)) {
                    self.setValue(newValue, forKey: Constants.imageKey)
                }
            }
        }
    
        private struct Constants {
            static var imageKey = "image"
        }
    }
    
    0 讨论(0)
  • 2020-12-31 20:44

    change this:

    UIImageView *imgv=[[UIImageView alloc]initWithFrame:CGRectMake(20,20,50,50)];
        imgv.image=[UIImage imageNamed:@"kaga.jpg"];
        [alert setValue:imgv  forKey:@"image"];
    

    to this:

    UIImage *img= [UIImage imageNamed:@"kaga.jpg"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
        [alert setValue:img  forKey:@"image"];
    
    0 讨论(0)
提交回复
热议问题