2011-09-23 51 views
1

每當我的應用程序變爲活動狀態時,我顯示一個屏幕(它是一個UIImageView,我添加到我的子視圖)和一個UIActivityIndi​​cator,同步我的數據。檢測並隱藏UIAlertView(或顯示一個視圖)

但是,如果有一個UIAlertView(我猜UIActionSheet也會)顯示用戶按下主頁按鈕的時刻,當他回來的屏幕和UIActivityIndi​​cator顯示,但警報視圖在他們身上。

我看到了面對這個問題的兩種方法:讓alertview隱藏或顯示不同的屏幕。

有關如何解決我的問題的任何想法?

回答

0

做這個問題只關心由您自己的應用程序或其他alertviews產生的UIAlertView?

也就是說,想要還必須考慮(並找到一種方法來隱藏)通過其他應用程序推送通知或SMS警報等顯示的警報視圖?如果是這樣,這可能會很複雜!

如果您只想考慮自己的應用程序的UIAlertViews,那麼一旦數據同步完成後您不需要再次顯示alertview嗎?因爲如果您只是想方設法解除alertview,但不再顯示它,用戶可能會錯過這裏的一些信息。

無論如何,沒有簡單/內置的方法。關閉alertview可能會產生副作用,因爲alertview可能會被視爲驗證,並且您編寫的處理buttonClicked事件的代碼可能會被觸發,而在您的情況下,它可能沒有意義。

但是在數據同步時實際隱藏alertview對我來說似乎是一個壞主意(只有我的觀點):因爲如果隱藏了alertview,用戶將沒有任何其他選擇,只能等待數據同步,沒有任何事情要做。而如果讓alertview可見,則至少會讓他有機會被告知sthg,並在數據同步時花費時間閱讀警報。


[編輯]這裏是我試過了。這可以工作,但即使隱藏了alertviews,仍然可以看到屏幕下面的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; 
    } 
} 
+0

我絕對不wan't到解除警報視圖。我只是想把它的隱藏屬性設置爲YES。事情是,我看到事情的方式,我必須保存一個指向每個警報的指針,並編寫一個委託,以便在用戶解除它時重置此指針。阻止用戶交互在這裏完全不是問題,實際上它的目標是 – Lucas

+0

好的問題是(我只是在示例項目中測試過)「UIAlertViews」不是應用程序的「UIWindow」的子視圖(或子子視圖等)。所以在顯示時,'UIAlertView'的'superview'是'_UIAlertOverlayWindow'(Apple的私人類),它本身沒有超級視圖...所以你不能挖掘UIWindow中顯示的視圖來查找所有UIAlertViews,這是不可能的。 – AliSoftware

+0

然後你可以做的是用你自己的子類替換項目中的每個UIAlertView,讓我們稱之爲'LCAlertView',並覆蓋它的'willMoveToWindow'方法,以便在屏幕上得到通知('window!= nil' )或被解僱('window == nil')。然後將仍在屏幕上的「UIAlertViews」存儲在一個NSArray中(例如,LCAlertView子類的一個類變量),以便循環使用它們。 – AliSoftware