在我之前的question on UIView animations中,我提到我必須模擬某種視圖的模態行爲。在這裏,我將解釋爲什麼並詢問一些更好的解決方案。在應用程序啓動時提供登錄屏幕
用戶應該在我的應用程序中看到的第一個視圖是登錄屏幕。在成功認證後,程序檢查用戶是父母還是孩子(在家庭中)。對於這些角色中的每一個,應用都必須提供不同的功能在我的AppDelegate
- 的登錄視圖控制器申報網點和標籤欄控制器(該接口的主要部分):
所以我設計了這樣的應用程序。
- 在
application:didFinishLaunchingWithOptions:
方法- 將主窗口到登錄視圖控制器的
rootViewController
。 - 使AppDelegate登錄控制器的委託,以便它可以在完成其工作時發送通知。
- 將主窗口到登錄視圖控制器的
- 當AppDelegate中接收關於成功登錄的消息時,它確定用戶是否是父或子,實例化的一組提供相應的功能視圖控制器,並將它們傳遞到標籤欄控制器。
- 最後,AppDelegate將主窗口的
rootViewController
切換到標籤欄控制器。 - 當然用戶可以註銷,然後
rootViewController
再次切換回登錄控制器。
我想提出並關閉登錄屏幕,就好像它是模態的視圖,但只的AppDelegate具有裸窗口,因而我沒有一個對象發送到presentModalViewController:
。這帶來了一個問題:
首先,它是一個很好的設計?
如果是這樣,我該如何正確模擬模態行爲?
1。總的來說,我同意你答案的第一部分。您已經描述了應用程序委託的用途。但是,當應用程序代理被用於其他目的時(例如,如果您希望成爲應用程序控制器),有一些例外情況。將其堆棧放入應用程序委託的Core Data模板。另一方面,視圖控制器應該控制其視圖。 'startUpController'的視圖不過是一個虛擬。因此,我們將在另一個容器視圖(窗口)中擁有一個「純容器」視圖。這違反了Occam的剃刀原理。 – adubr 2011-04-19 23:16:06
好吧,許多蘋果的示例項目都將邏輯放在了應用程序委託中,但這並沒有做到正確。如果您已經構建了任何核心數據應用程序,那麼您無疑會發現它在應用程序委託中的尷尬程度。 2.隨意分解額外的視圖(或用剃刀分開);既然你在問如何模擬一個模態對話框,我得出結論說你並不瞭解所有的觀點,並給了你一個簡單的解決方案。 – Rayfleck 2011-04-19 23:50:51
不幸的是我不太瞭解視圖,所以我試圖邏輯推理。這樣想:如果你沒有任何登錄屏幕和不同的角色,你會創建一個視圖控制器來設置主選項卡欄控制器嗎? – adubr 2011-04-21 09:11:25