检测来自另一个VC的警报是否可见

时间:2013-01-10 08:27:35

标签: ios uiviewcontroller uialertview

也许这是一个愚蠢的问题,但如果该警报属于另一个视图控制器,您如何检测警报是否可见?

我的意思是,如果警报(称之为myAlert)属于我正在检查的视图控制器,那么使用[myAlert isVisible]会告诉您。但是如果警报属于另一个视图控制器(称之为myOtherAlert),如果你有10个其他视图控制器,那就更糟了,你做了什么?检查每一个myOtherViewController.myOtherAlert?是不是有更好的方法?

4 个答案:

答案 0 :(得分:2)

如果你有一个(全局)变量,每次打开一个警报,你将它增加1,每次你(好,用户)关闭一个(但是,你必须通过代表来检测关闭)你减少1.然后如果变量等于零,则没有激活警报。听起来很多工作,但它是......语言无关的。

答案 1 :(得分:0)

  • 一个选项是将警报包装在您自己的类中,并为显示的警报添加类计数器。如果当前有任何警报可见,您可以随时查阅该课程。

  • 也许您可以遍历主窗口的子视图,看看它们之间是否有警报。 (这不起作用 - 见评论。)

  • 您还可以重新考虑UI逻辑,以便无法一次显示多个警报。我的意思是,只要您显示警报,用户就无法切换到其他视图控制器。这意味着在屏幕上显示警报以及未显示警报的视图控制器应该非常罕见。

答案 2 :(得分:0)

警报不属于任何视图或视图控制器。它实际上显示在另一个UIWindow中,我不认为你可以看出它是否可见,除非你编写自己的集中逻辑来跟踪你的应用程序中何时显示和解除警报。

答案 3 :(得分:0)

如果我理解正确,您的问题是有时您的视图控制器会显示警报视图,即使它们此刻不可见。在这种情况下,有一个简单的解决方法:

if ([self.view window]) {
    [alertView show];
}

如果情况并非如此,我建议您查看关联参考http://labs.vectorform.com/2011/07/objective-c-associated-objects/