2014-02-18 96 views
0

現代移動應用程序可以接收來自應用程序外部的真正異步事件,例如推送通知。處理這些事件有點麻煩,因爲事件到達時,應用程序可能無法立即處理。作爲一個例子,如果已經顯示一些彈出窗口或者如果UI正好在其他東西的中間,則顯示彈出警報以響應推送通知可能是不可能的。你如何處理這些事件?在UI中處理異步事件

具體而言,用於處理異步事件的代碼不能簡單地放置在普通的UIViewController中,可以嗎?屏幕上總是有不同的控制器,具體取決於用戶在UI中的位置。雖然我可以在每個視圖控制器中重複代碼(或將其重構爲共同的祖先),但感覺像是一種黑客。

如果我處理了某些後臺服務對象中的事件(感覺不錯),我仍然需要聯繫「當前主動控制器」並中繼事件信息。但是在iOS中並沒有像「當前主動控制器」那樣的東西,即使存在,控制器仍然必須指出它是否可以自由顯示事件。再一次,它看起來有很多錯綜複雜的角落案件需要處理。

總之,有沒有一種模式或庫來處理這樣的事件,而不是邏輯傳播到整個應用程序?

我知道這是一種主觀的,但我認爲這是一個簡單而有建設性的答案。

回答

1

當事件出現時,您可以創建一個新的UIWindow,並管理其關鍵字以在其他對話框之後或之上顯示對話框。通過這種方式,你不必照顧哪些UIViewController中你是...

UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 
window.rootViewController = viewController; 
window.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
window.opaque = NO; 
window.windowLevel = UIWindowLevelCFShareCircle; 
window.backgroundColor = [UIColor clearColor]; 

[window makeKeyAndVisible]; 

然後你就可以管理在其他的UIViewController你的看法。刪除窗口:

[window removeFromSuperview]; 
window = nil; 

希望這會有所幫助!