ios objective-c uialertview uialertcontroller uialertaction

ios - uialertcontroller swift 4



El controlador UIAlertAction se ejecuta después de la demora (3)

Estoy tratando de cambiar mis UIAlertViews a UIAlertControllers. Preparé esta acción para ello:

UIAlertAction *undoStopAction = [UIAlertAction actionWithTitle:@"Undo Stop" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { [self undoStop]; }];

Pero, el controlador no se ejecuta hasta aproximadamente un segundo después de que se toca la acción. Hay alguna manera de acelerar esto?


Aquí hay una semi-solución:

El controlador de una UIAlertAction es un poco tarde, ¿cómo puedo hacerlo de inmediato?

Básicamente, subclase el controlador de alerta y ejecute un controlador en viewWillDisappear. Puede almacenar el bloqueo del controlador en su controlador de alerta.

El problema con esta solución es que no puede ejecutar un controlador por botón como puede hacerlo si agrega acciones con UIAlertAction. Así que esa es una limitación importante.

Sin embargo, esta solución funcionó para mí (porque estaba tratando de agregar una vista de fondo detrás de la alerta cuando apareció la alerta y hacerla animar con la alerta cuando desapareció la alerta ... originalmente intenté hacerlo con el toque del botón, pero eso no funcionó porque el controlador se retrasó).


Como lo indica el comentario dejado por el Sr. T, es posible que no se llame al manejador en el hilo principal, lo que podría explicar el retraso. Intente incrustar su código de controlador en:

dispatch_async(dispatch_get_main_queue()) { <your code> }

y ver si todavía se obtiene el retraso.


El breve retraso es normal para la vista de alerta (aunque menos de un segundo). Si esto no le resulta conveniente, puede crear mediante programación una vista que cubra la pantalla con una etiqueta y un botón, básicamente una vista de alerta personalizada.