2011-04-19 136 views
0

在我之前的question on UIView animations中,我提到我必須模擬某種視圖的模態行爲。在這裏,我將解釋爲什麼並詢問一些更好的解決方案。在應用程序啓動時提供登錄屏幕

用戶應該在我的應用程序中看到的第一個視圖是登錄屏幕。在成功認證後,程序檢查用戶是父母還是孩子(在家庭中)。對於這些角色中的每一個,應用都必須提供不同的功能在我的AppDelegate

  • 的登錄視圖控制器申報網點和標籤欄控制器(該接口的主要部分):

    所以我設計了這樣的應用程序。

  • application:didFinishLaunchingWithOptions:方法
    • 將主窗口到登錄視圖控制器的rootViewController
    • 使AppDelegate登錄控制器的委託,以便它可以在完成其工作時發送通知。
  • 當AppDelegate中接收關於成功登錄的消息時,它確定用戶是否是父或子,實例化的一組提供相應的功能視圖控制器,並將它們傳遞到標籤欄控制器。
  • 最後,AppDelegate將主窗口的rootViewController切換到標籤欄控制器。
  • 當然用戶可以註銷,然後rootViewController再次切換回登錄控制器。

我想提出並關閉登錄屏幕,就好像它是模態的視圖,但只的AppDelegate具有裸窗口,因而我沒有一個對象發送到presentModalViewController:。這帶來了一個問題:

首先,它是一個很好的設計?
如果是這樣,我該如何正確模擬模態行爲?

回答

0

我認爲你是在正確的軌道上。然而,我總是盡力擺脫應用程序委託,只留下應用程序級別的東西(例如響應通知,進出背景)。在這種情況下,這樣做會對你有所幫助。

在appDelegate中,創建一個新的UIViewController類,類似「startUpController」。 將它的視圖添加到應用程序窗口。 然後,在您的startUpController中,執行您在應用程序委託(登錄,選項卡欄設置等)中執行的所有操作。 現在,由於您處於視圖控制器中,您可以將ModalViewController呈現給您的內容。

+0

1。總的來說,我同意你答案的第一部分。您已經描述了應用程序委託的用途。但是,當應用程序代理被用於其他目的時(例如,如果您希望成爲應用程序控制器),有一些例外情況。將其堆棧放入應用程序委託的Core Data模板。另一方面,視圖控制器應該控制其視圖。 'startUpController'的視圖不過是一個虛擬。因此,我們將在另一個容器視圖(窗口)中擁有一個「純容器」視圖。這違反了Occam的剃刀原理。 – adubr 2011-04-19 23:16:06

+0

好吧,許多蘋果的示例項目都將邏輯放在了應用程序委託中,但這並沒有做到正確。如果您已經構建了任何核心數據應用程序,那麼您無疑會發現它在應用程序委託中的尷尬程度。 2.隨意分解額外的視圖(或用剃刀分開);既然你在問如何模擬一個模態對話框,我得出結論說你並不瞭解所有的觀點,並給了你一個簡單的解決方案。 – Rayfleck 2011-04-19 23:50:51

+0

不幸的是我不太瞭解視圖,所以我試圖邏輯推理。這樣想:如果你沒有任何登錄屏幕和不同的角色,你會創建一個視圖控制器來設置主選項卡欄控制器嗎? – adubr 2011-04-21 09:11:25

相關問題