custom customization ios8 uialertview uialertcontroller

customization - uitableview custom cell swift 4



Personalice UIAlertController en iOS 8 para incluir elementos estándar como UITableView (4)

Creo que puede personalizar fácilmente el UIView agregando los controles necesarios y presentarlo de manera modal, a menos que tenga alguna otra razón específica para usar solo UIAlertController.

https://www.cocoacontrols.com/search?q=UIAlertview

Estoy acostumbrado a personalizar UIAlertViews través del UIAlertViews [ alert setValue:someView forKey:@"accessoryView"] . Esto crea contenido personalizable para UIAlertViews con alturas personalizadas. Sin embargo, solo funciona en iOS7 y hacia abajo. En iOS8, el UIAlertController ha hecho cargo, y no puedo personalizarlo más, reducirá la altura del UIAlertView .

¿Es imposible debido al uso incorrecto del UIAlertController , o cómo se supone que debo hacerlo? Estoy tratando de incorporar un UITableView dentro de un UIAlertController con UIAlertControllerStyleAlert .

Gracias.


Me encontré con el mismo problema en este momento. Miré el encabezado privado de UIAlertController ( https://github.com/nst/iOS-Runtime-Headers/blob/master/Frameworks/UIKit.framework/UIAlertController.h ) y encontré una propiedad prometedora: contentViewController

Y resultó ser exactamente igual a la vista de accessoryView solía ser para UIAlertView, la diferencia es que debe asignar un UIViewController a esta propiedad en lugar de una UIView.

UIViewController *v = [[UIViewController alloc] init]; v.view.backgroundColor = [UIColor redColor]; [alertController setValue:v forKey:@"contentViewController"];

¡Ese fragmento de código mostrará una vista roja en la vista de alerta! Personalización feliz UIAlertController;)

PD. Es una propiedad privada, pero usar KVC no debería haber un problema en la App Store, creo.

Editar:

Algunas personas se quejaron de que esto no es muy seguro. No es una API pública, así que sí, Apple podría cambiarla en cualquier versión, lo que causaría que este método fallara.

Para asegurarse de que toda su aplicación no se bloquee, si eso sucede, podría ajustar la llamada KVC en un bloque de try . Si la propiedad cambia, su controlador no mostrará la vista de contenido, pero tampoco se bloqueará:

@try { [alertController setValue:v forKey:@"contentViewController"]; } @catch(NSException *exception) { NSLog(@"Failed setting content view controller: %@", exception); }

El uso de este método en la producción puede ser riesgoso, y no lo recomiendo para alertas importantes.


Puede hacerlo con solo una línea de código usando mi categoría UIAlertController y reemplazar las alertas existentes en la aplicación, verifique here .


Sugiero que no pierdas el tiempo intentando meter UI adicional en un lugar donde no se supone que esté. Según los últimos años de mejoras, Apple probablemente agregará una vista personalizada en el próximo iOS. Hasta entonces, eche un vistazo a un marco diseñado para manejar esta situación exacta sin subvertir ninguna de las mejores prácticas: github.com/sberrevoets/SDCAlertView

Admite alertas que imitan las alertas nativas en iOS 7,8,9, incluido el manejo de todos los casos desagradables relacionados con el tamaño, los tipos de botones, la rotación, etc. Admite vistas personalizadas arbitrarias dentro de la alerta.

Utilizo esta biblioteca en Yahoo YMPromptKit para recibir notificaciones personalizadas de notificaciones que parecen exactamente nativas de iOS. Aquí hay otro ejemplo: