检测并隐藏UIAlertView(或在其上显示视图)

时间:2011-09-23 09:33:45

标签: cocoa-touch

每当我的应用程序变为活动状态时,我会显示一个屏幕(它是我添加到子视图中的UIImageView)和UIActivityIndi​​cator,同时我同步数据。

然而,如果有一个UIAlertView(我猜UIActionSheet也会)显示用户按下主页按钮的那一刻,当他回到屏幕并显示UIActivityIndi​​cator但警报视图已经过了。

我看到了两种解决此问题的方法:让alertview以不同方式隐藏或显示我的屏幕。

关于如何解决我的问题的任何想法?

1 个答案:

答案 0 :(得分:0)

问题仅涉及您自己的应用程序或其他警报视图生成的UIAlertView吗?

即是否还要考虑(并找到一种隐藏的方式)推送通知显示来自其他应用程序或短信提醒等的警报视图?如果是这样,这可能会很复杂!

如果您只想考虑自己应用程序的UIAlertViews,那么一旦数据同步完成,您是否需要再次显示警报视图?因为如果您只是找到一种方法来解除警报视图但从未再次显示它,那么用户可能会错过这里的一些信息。

无论如何都没有简单/内置的方法。解除警报视图可能会产生副作用,因为警报视图可以被视为已经过验证,并且您编写的用于处理buttonClicked事件的代码可能会被触发,而在您的情况下它可能没有意义。

但实际上在数据同步时隐藏alertview对我来说似乎是一个坏主意(仅限我的意见):因为如果你隐藏了alertview,用户除了等待数据同步之外别无选择,w / o还有别的事可做。然而,如果你让alertview可见,它将给他一个至少被告知sthg的机会,并在数据同步时花时间阅读警报。


[编辑] 以下是我的尝试。这样可行,但即使在隐藏警报视图后,屏幕上的UIAlertViews下方仍然可见。

请注意,即使有办法隐藏此光晕,我也不确定在将应用程序提交到AppStore时是否会接受此操作。

LCAlertView.h

@interface LCAlertView : UIAlertView
+(void)setAlertViewsVisible:(BOOL)isVisible;
@end

LCAlertView.m

#import "LCAlertView.h"
static UIView* __alertsParentWindow;
static int __alertsCount = 0;

@implementation LCAlertView
+(void)setAlertViewsVisible:(BOOL)isVisible {
    __alertsParentWindow.hidden = !isVisible;
}
-(void)didMoveToWindow {
    if (self.window != nil) {
        // showing
        __alertsParentWindow = [self.window retain];
        ++__alertsCount;
    } else {
        // hiding
        --__alertsCount;
        [__alertsParentWindow release];
        if (__alertsCount==0) __alertsParentWindow = nil;
    }
}