Używam MPMoviePlayerController w iOS. Słucham wszelkich błędów, które mogą mieć podczas odtwarzania filmów. W moich procedurach obsługi błędów pojawia się UIAlertView. Czasami błędy mogą występować w krótkim odstępie czasu, a zatem wiele pól alarmowych będzie się układać w stosy. Dla lepszego komfortu użytkownika nie chcę wyświetlać kolejnego alertu, jeśli wcześniej wyświetlany jest jeszcze jeden.Jak zapobiegać gromadzeniu się wielu UIAlertView?
Odpowiedz
Spróbuj tego:
ustawiona wartość logiczną do true
gdy pojawi się alarm, ustawić go na false
po zamknięciu alert, i zawsze sprawdzić wartość logiczną, aby zobaczyć, czy to true
zanim pojawi się zdarzenie. Jeśli jest to true
, będziesz wiedział, że masz już okno alertu.
Możesz to zaimplementować samemu banalnie. Ponieważ wyświetlasz alert, a Ty także jesteś delegatem alarmu, dzięki czemu wiesz, kiedy go nie ma, możesz łatwo sprawdzić, czy alert jest widoczny po ustawieniu flagi boolowskiej po wyświetleniu alertu i ostrzeżenia. W ten sposób, jeśli ustawiona jest wartość boolowska, możesz anulować wszystkie kolejne alerty.
Czasami wyskakuje alert systemowy i powoduje dziwne zachowanie :( – powerj1984
O ile mi wiadomo, jedynym sposobem jest śledzenie, czy alert jest aktualnie wyświetlany i/lub aktualnie jest on odrzucany w aplikacji. Spróbuj wyświetlić alert w appDelegate, a następnie za pomocą powiadomienia powiadom powiadomienie appDelegate za każdym razem, gdy alert zostanie zamknięty. W ten sposób appDelegate śledzi, czy istnieje alert z boolowską zmienną flagową.
Po wyświetleniu alertu zostanie on przeniesiony do katalogu _UIAlertOverlayWindow. Dlatego dość kruchą metodą jest iteracja przez wszystkie okna i sprawdzenie, czy są jakieś subviews 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;
}
Jest to dokument nieudokumentowany, ponieważ zależy on od wewnętrznej hierarchii widoków, chociaż Apple nie może narzekać na to. Bardziej wiarygodne, lecz jeszcze bardziej nieudokumentowana metoda polega na sprawdzeniu, czy `
[_UIAlertManager visibleAlert]
` jest zerowa.
Te metody nie pozwalają sprawdzić, czy wyświetlany jest UIAlertView z SpringBoard.
Użyj nowego kontrolera UIAlertViewController. Jeśli spróbujesz wyświetlić alert, gdy inny jest widoczny, ignoruje go i wyświetla ostrzeżenie pokazane poniżej. To nieprzyjemny skutek dla osób, które chcą tradycyjnego zachowania ułożonych alarmów, ale dla twojego przypadku to dobre rozwiązanie.
Warning: Attempt to present <UIAlertController: 0x7f9ef34c17e0> on <MasterViewController: 0x7f9ef344ec90> which is already presenting (null)
To powinno działać:
-(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
}
nie
- 1. Zapobieganie gromadzeniu się wielu alertów jonowych
- 2. Jak zapobiegać tabelę z kurczących się rzutni
- 3. Jak zapobiegać włączaniu funkcji przeglądania w wielu wersjach podrzędnych zależności?
- 4. UIActivityIndicatorView nie wyświetla się poprawnie na UIAlertView
- 5. UIView Popup jak UIAlertView
- 6. Angular UI Bootstrap Modal - jak zapobiegać otwieraniu wielu modów?
- 7. UIAlertView Kliknij wydarzenie wewnątrz UIAlertView delegata
- 8. Zhakowany Joomla. Jak zapobiegać?
- 9. Delegaci UIAlertView
- 10. Obracanie UIAlertView
- 11. Kątowe jak zapobiegać FOUC
- 12. UIAlertView blokowanie
- 13. Jak wyrównać wiadomości w UIAlertView?
- 14. Jak zapobiegać obracaniu się alertów na zmianie orientacji IOS 8
- 15. Delphi - Jak zapobiegać przemieszczaniu się Forms/MsbBox pod wcześniejszym formularzem?
- 16. Etykieta Safari 8 + migot unosząca się przy migawce, jak zapobiegać?
- 17. Kontrolery Boga - jak im zapobiegać?
- 18. Czy mogę przenieść UIAlertView?
- 19. Jak rekursywnie zapobiegać wiązaniu AngularJS?
- 20. Jak zapobiegać internowaniu łańcucha znaków?
- 21. Jak zapobiegać śpiącej aplikacji Ipod
- 22. Zmiana typu klawiatury UIAlertView
- 23. Dodawanie UIActivityindicatorView w UIAlertView
- 24. otherButtonTitles w UIAlertView
- 25. Swift Niestandardowy UIAlertView
- 26. Uzyskiwanie tekstu z UIAlertView
- 27. Pisanie funkcji dla UIAlertView?
- 28. Jak mogę init, pole tekstowe w UIAlertView
- 29. Ukryj programowo UIAlertView?
- 30. UIAlertView bez przycisku Anuluj?
Absolutnie. Kod, który wkleiłeś jest tak samo zły, jak używanie SPI, i chociaż prawdopodobnie nie zostanie odrzucony (ponieważ trudno jest znaleźć pokręty typu podgląd, tak jak robisz), jest to coś, co słusznie * powinno * spowodować odrzucenie Cię z aplikacji sklep. Przedstawia również założenia dotyczące działania UIAlertView i może złamać aktualizację systemu operacyjnego. –
Dzięki, usunąłem tę część mojej odpowiedzi. – mopsled