I want UIAlertController
to present an alert with UIImageView
in an ActionSheet
. But when I run the application it is terminating.
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];
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"
}
}
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"];