Sto usando MPMoviePlayerController in iOS. Sto ascoltando eventuali errori durante la riproduzione di video. Nei miei gestori degli errori, ho visualizzato uno UIAlertView. A volte gli errori possono verificarsi in rapida successione l'uno dall'altro e quindi più caselle di avviso si impilano. Per una migliore esperienza utente, non desidero far apparire un altro avviso se uno dei precedenti è ancora visualizzato.Come evitare che UIAlertView si accumuli?
risposta
Prova questo:
Impostare un valore booleano per true
quando si pop-up un avviso, impostarlo su false
quando si chiude un avviso, e controllare sempre la booleana per vedere se è true
prima di pop up di un evento. Se è true
, saprai che hai già una finestra di avviso.
È possibile implementarlo da soli. Dato che stai visualizzando l'avviso e sei anche il delegato della segnalazione in modo da sapere quando è finito, puoi facilmente monitorare se c'è un avviso visibile semplicemente impostando una bandiera booleana sulla segnalazione di allerta e avviso. In questo modo se il valore booleano è impostato, puoi annullare tutti gli avvisi successivi.
A volte gli avvisi di sistema popup e causano un comportamento strano :( – powerj1984
Per quanto ne so, l'unico modo è quello di tenere traccia o meno di un avviso attualmente visualizzato e/o uno è attualmente in fase di eliminazione all'interno dell'applicazione. Prova a mostrare l'avviso nell'appDelegate e quindi a utilizzare una notifica per notificare l'appDelegate ogni volta che l'avviso viene chiuso. In questo modo, l'AppDelegate tiene traccia della presenza o meno di un avviso con una variabile flag booleana.
Quando viene visualizzato un avviso, verrà spostato su _UIAlertOverlayWindow. Pertanto, un metodo piuttosto fragile è quello di scorrere tutte le finestre e controllare se ci sono delle sotto-visualizzazioni di 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;
}
Questo è documentato in quanto dipende dalla gerarchia vista interna, anche se Apple non può lamentarsi di questo. Un metodo più affidabile, ma anche più documentato è quello di verificare se `
[_UIAlertManager visibleAlert]
` è pari a zero.
Questi metodi non possono controllare se viene visualizzato UIAlertView da SpringBoard.
Utilizzare il nuovo UIAlertViewController. Se si tenta di presentare un avviso mentre un altro è in vista, lo ignora e emette l'avviso mostrato di seguito. È un cattivo effetto collaterale per le persone che vogliono il comportamento tradizionale degli avvisi impilati, ma per il tuo caso è una buona soluzione.
Warning: Attempt to present <UIAlertController: 0x7f9ef34c17e0> on <MasterViewController: 0x7f9ef344ec90> which is already presenting (null)
Dovrebbe funzionare:
-(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
}
Assolutamente no
- 1. Come evitare che le div si sovrappongano?
- 2. Come funziona [UIAlertView show]?
- 3. Sostituzione UIAlertView
- 4. Come evitare che i bordi a doppio spessore si sovrappongano?
- 5. Come evitare che le viste si sovrappongano nel relativo layout?
- 6. Come evitare che oggetti flessibili si trabocchino dal contenitore?
- 7. Come evitare che i bordi di graphviz si sovrappongano
- 8. UIAlertView evento Click all'interno UIAlertView delegato
- 9. Come si mostra un UIAlertView sopra l'Apple Pay PKPaymentAuthorizationViewController?
- 10. Delegati UIAlertView
- 11. UIAlertView cancelButtonTitle
- 12. come ottenere input da UIAlertView?
- 13. impedisce UIAlertView di ignorare
- 14. Ottenere testo da UIAlertView
- 15. avvertimento UIAlertView quando respinge
- 16. UIAlertView che si arresta in modo anomalo sul metodo non documentato
- 17. Come evitare l'unione si impegna usando TortoiseGit
- 18. UIAlertView senza pulsante Annulla?
- 19. Come posso evitare che il display su un dispositivo iOS si oscuri e si spenga?
- 20. Riproduzione audio di notifica locale quando si visualizza UIAlertView?
- 21. Evitare che si ripeta l'allarme nel fine settimana
- 22. Come posso evitare che le dimensioni dei caratteri UITextfield si riducano man mano che digiti
- 23. otherButtonTitles in UIAlertView
- 24. Posso spostare un UIAlertView?
- 25. Disattivazione del pulsante UIAlertView
- 26. Toccando 2 pulsanti contemporaneamente su UIAlertView si blocca l'app
- 27. Come impostare l'autocapitalizzazione su UITextField di UIAlertView?
- 28. scontri UIAlertView in iOS 8.3
- 29. UIAlertView pronta ingresso
- 30. UIAlertView: UIAlertViewStyleSecureTextInput: Tastiera numerica
. Il codice che hai incollato è tanto pessimo quanto usare SPI, e anche se probabilmente non ti farà rifiutare (perché è difficile trovare la sottoview che pasticcia come stai facendo), è qualcosa che giustamente * dovrebbe * farti rifiutare dall'app negozio. Sta anche facendo supposizioni su come funziona UIAlertView e potrebbe interrompersi su un aggiornamento del sistema operativo. –
Grazie, ho rimosso quella parte della mia risposta. – mopsled