uialert objective example alerta ios uialertcontroller

ios - objective - Agregar imagen a UIAlertAction en UIAlertController



uialertcontroller objective c (7)

He visto un par de capturas de pantalla de un UIAlertControllers con una imagen a la izquierda de la fila pero no lo veo en la documentación. Un ejemplo visual es Aquí está el código que tengo para mi controlador ahora mismo:

UIAlertController * view = [UIAlertController alertControllerWithTitle:@"My Title" message:@"Select you Choice" preferredStyle:UIAlertControllerStyleActionSheet]; UIAlertAction* ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) { }]; [view addAction:ok]; [self presentViewController:view animated:YES completion:nil];


Podría agregar una imagen encima de la etiqueta del título subclasificando UIAlertController y agregando /n a la cadena de título para hacer espacio para UIImageView . Tendría que calcular el diseño según el tamaño de la fuente. Para imágenes en UIAlertAction usando KVC como self.setValue(image, forKey: "image") . Recomendaría la extensión que verifica las responds(to:) . Aquí hay una implementación de muestra.


Pruebe algo como esto:

UIAlertView* alert = [UIAlertView alloc] initWithTitle: @"Test Alert" message: @"Alert With Custom View" delegate:nil cancelButtonTitle:@"NO" otherButtonTitles:@"YES", nil]; UIImage* imgMyImage = [UIImage imageNamed:@"myImage.png"]; UIImageView* ivMyImageView = [UIImageView alloc] initWithFrame:CGRectMake(0, 0, imgMyImage.size.width, imgMyImage.size.height)]; [ivMyImageView setImage:imgMyImage]; [alert setValue: ivMyImageView forKey:@"accessoryView"]; [alert show];

Probado esto y funciona para iOS 7.0


Swift 3 extensión, propiedad y conveniencia init.

extension UIAlertAction{ @NSManaged var image : UIImage? convenience init(title: String?, style: UIAlertActionStyle,image : UIImage?, handler: ((UIAlertAction) -> Swift.Void)? = nil ){ self.init(title: title, style: style, handler: handler) self.image = image } }

gracias a Shahar Stern por la inspiración


Versión Swift:

actionBtn.setValue(UIImage.init(named: "completeDose"), forKey: "image")


Y así es como se hace:

let image = UIImage(named: "myImage") var action = UIAlertAction(title: "title", style: .default, handler: nil) action.setValue(image, forKey: "image") alert.addAction(action)

la propiedad de la imagen no está expuesta, por lo que no hay garantía de que funcione en versiones futuras, pero funciona bien a partir de ahora


Para veloz

let actionSheet = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet) let action = UIAlertAction(title: NSLocalizedString("Share", comment: ""), style: .default, handler: { _ in }) let image = UIImage(named: "Temp1") action.setValue(image?.withRenderingMode(.alwaysOriginal), forKey: "image") actionSheet.addAction(action) actionSheet.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil)) self.present(actionSheet, animated: true, completion: nil)

Nota: IMP Line withRenderingMode (.alwaysOriginal)


UIAlertController * view= [UIAlertController alertControllerWithTitle:@"Staus ! " message:@"Select your current status" preferredStyle:UIAlertControllerStyleActionSheet]; UIAlertAction* online = [UIAlertAction actionWithTitle:@"Online" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) { //Do some thing here [view dismissViewControllerAnimated:YES completion:nil]; }]; UIAlertAction* offline = [UIAlertAction actionWithTitle:@"Offline" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) { [view dismissViewControllerAnimated:YES completion:nil]; }]; UIAlertAction* doNotDistrbe = [UIAlertAction actionWithTitle:@"Do not disturb" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) { [view dismissViewControllerAnimated:YES completion:nil]; }]; UIAlertAction* away = [UIAlertAction actionWithTitle:@"Do not disturb" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * action) { [view dismissViewControllerAnimated:YES completion:nil]; }]; [online setValue:[[UIImage imageNamed:@"online.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] forKey:@"image"]; [offline setValue:[[UIImage imageNamed:@"offline.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] forKey:@"image"]; [doNotDistrbe setValue:[[UIImage imageNamed:@"DND.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] forKey:@"image"]; [away setValue:[[UIImage imageNamed:@"away.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] forKey:@"image"]; [view addAction:online]; [view addAction:away]; [view addAction:offline]; [view addAction:doNotDistrbe]; [self presentViewController:view animated:YES completion:nil];