1

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

我的意思是,如果警报(调用它myAlert)属于我正在检查的视图控制器,那么 using[myAlert isVisible]会告诉你。但是如果警报属于另一个视图控制器(调用它myOtherAlert),更糟糕的是,如果你有 10 个其他视图控制器,你会怎么做?检查每一个可能的myOtherViewController.myOtherAlert?没有更好的方法吗?

4

4 回答 4

2

如果您有一个(全局)变量,每次打开警报时都会将其增加 1,并且每次(嗯,用户)关闭一个警报时(但是,您必须通过委托来检测关闭)您会减少乘 1。然后如果变量等于 0,则没有激活警报。听起来工作量很大,但它是……独立于语言的。

于 2013-01-10T09:10:52.607 回答
0
  • 一种选择是将警报包装在您自己的类中,并为显示的警报添加一个类计数器。然后,如果当前可见任何警报,您可以随时咨询班级。

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

  • 您还可以重新考虑您的 UI 逻辑,使其无法同时显示多个警报。我的意思是,一旦您显示警报,用户就无法切换到不同的视图控制器。这意味着在屏幕上同时显示警报和不显示它的视图控制器应该是非常罕见的。

于 2013-01-10T08:33:22.637 回答
0

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

于 2013-01-10T08:33:23.190 回答
0

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

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

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

于 2013-01-10T08:33:23.387 回答