每当我的应用程序变为活动状态时,我会显示一个屏幕(它是我添加到子视图中的UIImageView)和UIActivityIndicator,同时我同步数据。
然而,如果有一个UIAlertView(我猜UIActionSheet也会)显示用户按下主页按钮的那一刻,当他回到屏幕并显示UIActivityIndicator但警报视图已经过了。
我看到了两种解决此问题的方法:让alertview以不同方式隐藏或显示我的屏幕。
关于如何解决我的问题的任何想法?
答案 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;
}
}