2011-10-14 100 views
1

我正在製作一個推送通知應用程序,我希望應用程序顯示一個模式視圖控制器或在收到通知時將視圖推送到當前導航控制器上。我的應用程序委託中有didReceiveRemoteNotification,它獲取通知,但現在我無法推送視圖控制器,因爲我無法訪問導航控制器(或任何可以使用的東西)。我見過其他職位,他們創建導航控制器,並在應用程序委託中做所有事情,但我已經使用了界面構建器,因此對於我而言,如何訪問它並不明顯。推新視圖控制器或顯示模式的最佳方式是什麼?如何從應用程序代理訪問導航控制器?

感謝您的任何提示/建議!

+0

安置自己當前的applicationDidFinishLaunching:withoptions方法 – Rog

回答

1

您可以使用NSNotificationCenter從應用程序委託中重新發布信息,並讓您的視圖邏輯調用addObserver,以便接收此通知。

這樣,您可以讓不同部分的用戶界面以不同方式響應,而無需將這些知識集中在應用程序委託中。

+0

謝謝,這聽起來像什麼我會想這樣做。我今晚試試 – Stephen

+0

這正是我需要的! – Stephen

0

我不建議通過AppDelegate訪問導航控制器,而是建議添加一個Singleton類來處理整個應用程序中的屏幕。此屏幕管理器負責在視圖之間添加/刪除/切換,同時確保所有視圖控制器在完成時都能正確釋放。這樣,您可以訪問當前的屏幕,並根據需要呈現模態視圖控制器(請確保您的所有視圖控制器都實現了一個特定的協議,該協議聲明瞭執行此操作的方法,但爲了清晰起見&正確編碼)。祝你好運!

2

最簡單的方法可能是創建一個類型爲uinavigationcontroller的應用程序委託的屬性,然後從屬於您的應用程序的導航控制器的一個屏幕中進行設置。如果你只是想訪問它,這對我很有用,而且非常簡單。有明顯的警告,但假設你的應用程序可以等待從應用程序委託中使用navi控制器,直到第一個屏幕啓動後......那麼你很好,我認爲。

從您的主頁查看:

IQAppDelegate *appDelegate = (IQAppDelegate *)[[UIApplication sharedApplication] delegate]; 
[appDelegate setNaviController:[self navigationController]]; 
相關問題