我在iOS中使用MPMoviePlayerController。我正在收聽播放視頻時可能遇到的任何錯誤。在我的錯誤處理程序中,我彈出一個UIAlertView。有時候錯誤可能會相互快速發生,因此多個警報框會疊加起來。爲了更好的用戶體驗,如果仍然顯示較早的警報,我不希望彈出另一個警報。如何防止疊加多個UIAlertView?
回答
試試這個:
設置一個布爾值,true
當你彈出一個警告,它設置爲false
當您關閉警報,並經常檢查布爾值,看它是否是true
你彈出一個事件之前。如果它是true
,則會知道您已經有一個警告窗口顯示。
你可以自己實現這一點。由於您正在顯示警報,並且您也是警報的代表,所以您可以知道警報何時消失,只需在警報顯示和警報隱藏時設置布爾標誌,您就可以輕鬆跟蹤是否有警報可見。這樣,如果設置了布爾值,則可以撤銷任何後續警報。
有時系統警報彈出並導致奇怪的行爲:( – powerj1984
據我所知,唯一的方法是跟蹤當前是否顯示警報和/或目前是否正在應用程序中解散警報。嘗試在appDelegate中顯示警報,然後在每次關閉警報時使用通知通知appDelegate。這樣,appDelegate會跟蹤是否存在具有布爾標誌變量的警報。
當出現警報時,它將被移至_UIAlertOverlayWindow。因此,一個非常脆弱的方法是迭代所有窗口並檢查是否有任何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;
}
這是無證的,因爲它取決於內部視圖的層次結構,雖然蘋果公司不能抱怨這一點。一個更可靠的,但甚至更無證方法是檢查是否`
[_UIAlertManager visibleAlert]
`是零。
這些方法無法檢查是否顯示SpringBoard的UIAlertView。
使用新的UIAlertViewController。如果在另一個視圖中嘗試顯示警報,則忽略它並輸出下面顯示的警告。對於那些希望傳統堆疊警報行爲的人來說,這是一個令人討厭的副作用,但對於您的情況,這是一個很好的解決方案。
Warning: Attempt to present <UIAlertController: 0x7f9ef34c17e0> on <MasterViewController: 0x7f9ef344ec90> which is already presenting (null)
它應該工作:
-(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
}
- 1. 如何能同時防止多個UIAlertView?
- 2. 使用prepOverlay時,如何防止打開多個疊加層?
- 3. 如何防止同時彈出多個UIAlertView警報?
- 4. 防止UIAlertView退出
- 5. 如何防止多次吐司重疊
- 6. 如何防止qtip重疊
- 7. 如何防止Div重疊
- 8. 如何防止div重疊?
- 9. 如何防止多個通知上的重疊聲音
- 10. 防止兩個div重疊?
- 11. 如何在UIVIewController中添加多個UIAlertview?
- 12. 防止div重疊
- 13. 防止UIViews重疊
- 14. 防止cronjobs重疊
- 15. 如何防止jquery追加多次
- 16. 如何防止多次添加片段?
- 17. 如何防止javascript被多次加載
- 18. 多背景圖像,防止重疊
- 19. 如何防止我的TextView重疊?
- 20. 如何防止頂點重疊?
- 21. 如何防止標籤重疊
- 22. 如何防止時間重疊?
- 23. 如何防止Bootstrap 3列重疊
- 24. 如何防止數據標籤重疊
- 25. 如何防止div的垂直重疊
- 26. 如何防止一行堆疊?
- 27. 如何防止我的jQuery庫重疊?
- 28. 如何防止Highcharts中的列重疊
- 29. 防止多個聲音文件重疊如播放
- 30. 添加多個confirmationalerts(UIAlertView)
絕對不是。你粘貼的代碼與使用SPI一樣糟糕,雖然它可能不會讓你被拒絕(因爲你很難找到子視圖戳),這是正確的*應該*讓你從應用中被拒絕商店。它也在假設UIAlertView是如何工作的,並且可能會在操作系統更新中破壞。 –
謝謝,我已經刪除了我的答案的一部分。 – mopsled