我在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. 如何防止qtip重叠
- 6. 如何防止多个通知上的重叠声音
- 7. 防止两个div重叠?
- 8. 如何在UIVIewController中添加多个UIAlertview?
- 9. 防止UIViews重叠
- 10. 如何防止jquery追加多次
- 11. 如何防止javascript被多次加载
- 12. 如何防止标签重叠
- 13. 如何防止我的jQuery库重叠?
- 14. 如何防止div的垂直重叠
- 15. 如何防止Bootstrap 3列重叠
- 16. 如何防止我的TextView重叠?
- 17. 添加多个confirmationalerts(UIAlertView)
- 18. 防止在PositiveButton上关闭UIAlertView点击
- 19. 如何防止多个RKResponseDescriptors匹配?
- 20. 如何防止多个页面?
- 21. 如何防止HAProxy的多个实例?
- 22. 如何防止SceneKit中的SpriteKit叠加延伸?
- 23. 如何防止用户点击叠加层?
- 24. 防止点击加载多个动作
- 25. 防止两个跨度元素重叠
- 26. 如何防止UIAlertView中的自动换行
- 27. 如何防止apk加载
- 28. 如何防止附加javaagent?
- 29. 防止堆叠AJAX请求
- 30. 防止setInterval的重叠
绝对不是。你粘贴的代码与使用SPI一样糟糕,虽然它可能不会让你被拒绝(因为你很难找到子视图戳),这是正确的*应该*让你从应用中被拒绝商店。它也在假设UIAlertView是如何工作的,并且可能会在操作系统更新中破坏。 –
谢谢,我已经删除了我的答案的一部分。 – mopsled