Estoy usando MPMoviePlayerController en iOS. Estoy escuchando cualquier error que pueda tener al reproducir videos. En mis controladores de errores, aparece un UIAlertView. En ocasiones, pueden producirse errores en sucesión rápida entre sí y, por lo tanto, se acumularán múltiples cuadros de alerta. Para una mejor experiencia de usuario, deseo no mostrar otra alerta si aún se muestra una anterior.¿Cómo evitar que varios UIAlertView se acumulen?
Respuesta
Prueba esto:
Establecer un valor lógico a true
cuando usted hace estallar una alerta, configurarlo para que false
cuando se cierra una alerta, y siempre comprobar el booleano para ver si es true
antes de que el pop hasta un evento. Si es true
, sabrá que ya tiene una ventana de alerta.
Puede implementar esto trivialmente. Como muestra la alerta y también es el delegado de la alerta para saber cuándo se ha ido, puede rastrear fácilmente si hay una alerta visible simplemente configurando una bandera booleana al mostrar la alerta y ocultar la alerta. De esta forma, si se establece booleano, puede anular cualquier alerta posterior.
A veces las alertas del sistema se abren y causan un comportamiento extraño :( – powerj1984
Hasta donde yo sé, la única forma es realizar un seguimiento de si actualmente se está mostrando o no una alerta y de si se está descartando una dentro de la aplicación. Intente mostrar la alerta en la aplicaciónDelegate y luego use una notificación para notificar a la aplicaciónDelegate cada vez que se cierre la alerta. De esta forma, la aplicación delegada realiza un seguimiento de si hay una alerta con una variable de bandera booleana.
Cuando aparece una alerta, se moverá a _UIAlertOverlayWindow. Por lo tanto, un método bastante frágil es iterar a través de todas las ventanas y verificar si hay alguna subvista UIAlertView.
-(BOOL)checkAlertViewVisibleStatus
{
for (UIWindow* window in [UIApplication sharedApplication].windows)
{
NSArray* subviews = window.subviews;
if ([subviews count] > 0)
if ([[subviews objectAtIndex:0] isKindOfClass:[UIAlertView class]])
return YES;
}
return NO;
}
Esto no está documentado, ya que depende de la jerarquía de la vista interna, aunque Apple no puede quejarse de esto. Un método más confiable, pero aún más indocumentado es comprobar si `
[_UIAlertManager visibleAlert]
` es nula.
Estos métodos no pueden verificar si se muestra un UIAlertView de SpringBoard.
Utilice el nuevo UIAlertViewController. Si intentas presentar una alerta mientras hay otra a la vista, la ignora y muestra la advertencia que se muestra a continuación. Es un efecto secundario desagradable para las personas que desean el comportamiento tradicional de las alertas apiladas, pero para su caso es una buena solución.
Warning: Attempt to present <UIAlertController: 0x7f9ef34c17e0> on <MasterViewController: 0x7f9ef344ec90> which is already presenting (null)
Se debe trabajar:
-(BOOL) doesAlertViewExist
{
if ([[UIApplication sharedApplication].keyWindow isMemberOfClass:[UIWindow class]])
{
return NO;//AlertView does not exist on current window
}
return YES;//AlertView exist on current window
}
Por supuesto que no
- 1. impide que UIAlertView descarte
- 2. Evitar que se toquen varios botones al mismo tiempo
- 3. ¿Evitar que UITableView se desplace?
- 4. cómo evitar que Sinatra se ejecute?
- 5. ¿Cómo evitar que se desinstale una aplicación?
- 6. Cómo evitar que JFrame se cierre
- 7. ¿Cómo evitar que los colores se mezclen?
- 8. ¿Cómo puedo evitar que se seleccione texto?
- 9. Cómo evitar que GCC se alinee
- 10. ¿Cómo funciona [UIAlertView show]?
- 11. ¿Cómo puedo descartar UIAlertView?
- 12. UIAlertView Delegados
- 13. UIActivityIndicatorView no se muestra correctamente en UIAlertView
- 14. Evitar que se llame a un método antes que otro
- 15. UIAlertView sin botón Cancelar?
- 16. UIAlertView reemplazo
- 17. UITextField en UIAlertView en iPhone: ¿cómo hacer que responda?
- 18. - (void) alertViewCancel: (UIAlertView *) alertView no se llama
- 19. Evitar que los caracteres Emoji se muestren
- 20. Evitar que ciertas columnas SlickGrid se reordenen
- 21. ¿Cómo puedo evitar que mercurial empuje subrepos?
- 22. cómo obtener información de UIAlertView?
- 23. ¿Cómo agregar userInfo a UIAlertView?
- 24. ¿Cómo alinear mensajes en UIAlertView?
- 25. UIAlertView cancelButtonTitle
- 26. UIAlertView personalizado?
- 27. Personalización UIAlertView
- 28. ¿Cómo esperaría a que se detengan varios subprocesos?
- 29. cómo evitar que css herede
- 30. IE - evitar que se muestren errores en IE
. El código que pegaste es igual de malo que usar SPI, y aunque probablemente no te rechace (porque es difícil encontrar la vista parcial como lo haces), es algo que con razón * debería * hacerte rechazar desde la aplicación almacenar. También hace suposiciones sobre cómo funciona UIAlertView y podría romper con una actualización del sistema operativo. –
Gracias, eliminé esa parte de mi respuesta. – mopsled