建議您將UIViewController
的view
添加到另一個UIViewController
的view
?建議將UIViewController的視圖添加到另一個UIViewController視圖中?
請解釋爲什麼這是一種好的做法或不好的做法。
建議您將UIViewController
的view
添加到另一個UIViewController
的view
?建議將UIViewController的視圖添加到另一個UIViewController視圖中?
請解釋爲什麼這是一種好的做法或不好的做法。
蘋果,因此大多數人遵循蘋果的指導方針會告訴你這是不好的做法,蘋果公司爲此增加了ViewController遏制(childViewControllers)。不幸的是,大多數人盲目地遵循這一點,並不會告訴你爲什麼這是不好的做法。我很高興你能問這個問題。
事實是,在模型 - 視圖 - 控制器架構,視圖應該是可重複使用的,無論它們所包含的內容,因此,視圖和控制視圖的內容不應該是相同的對象。在iOS5之前,UIViewController究竟是如何實現的?Apple不鼓勵你在多次使用中使用它們,而這是一件非常合乎邏輯的事情。當然這是令人困惑的,許多人無視這些指導方針,無論如何,包括我自己在內,應用程序運行良好,並通過了應用商店驗證,這導致了更多的混淆。 結果是,直到今天,人們仍然在蘋果崩潰並給了我們自定義容器ViewControllers一年多之後提出問題。我已經看到人們經常用複雜的答案回答這個問題,至於重新創建UIViewController作爲一個從NSObject繼承的非常簡單的問題。只是因爲蘋果不鼓勵使用UIViewControllers,甚至不知道爲什麼。
由於將ViewController視圖添加爲子視圖通常可以很好地工作,並且ViewController遏制在許多人仍然支持的iOS4中不可用,因此太多人不會使用ViewController遏制。這是更乾淨的解決方案,當您想在ViewController中使用ViewController時,應儘可能使用ViewController。如果沒有,在大多數情況下,您應該能夠簡單地將ViewController的視圖添加爲子視圖,您只需知道在哪種情況下。
這裏是你期待什麼,如果你只需添加一個視圖控制器的看法,另一種觀點:不能保證
我絕對不會鼓勵它,但我也不勸阻它。這是情景,如果你不再需要支持iOS4,那麼你可以避免它。但是,如果你牢記上面的列表,那麼它也不會造成任何傷害,並且你的應用程序將正常工作。
當然,您可以將UIViewController的視圖添加到另一個UiViewController的視圖中,至少可以作爲類變量。但我無法理解此解決方案的最終目標。 我認爲這是一個不好的做法,因爲應用程序界面的複雜性在增加。
他的意思是,可以用'addSubview:'添加視圖。什麼類變量與此有關? – mattjgalloway 2012-02-23 08:56:17
有時沒關係,有時候不是。沒有顯示一些圖並解釋視圖控制器層次結構和視圖層次結構之間的關係,很難給出更好的答案。
幸運的是,蘋果已經做到了。請觀看WWDC 2011的「實施UIViewController Containment」視頻,以獲取何時可以使用以及何時不可使用的詳細說明。
通常在模型 - 視圖 - 控制器體系結構中,我們可以重用視圖。
但是對於UIViewController,它可能並不總是好主意。這可能會使項目體系結構變得複雜,因爲按照Apple文檔,視圖與視圖控制器緊密相連,所以它可能不易管理。
來自UIViewController的引用: 視圖控制器與他們管理的視圖緊密綁定,並參與用於處理事件的響應器鏈。視圖控制器是UIResponder類的後代,並且被插入受管根視圖與其超視圖之間的響應器鏈中,該視圖通常屬於不同的視圖控制器。如果視圖控制器的視圖不處理事件,則視圖控制器可以選擇處理該事件,也可以將事件傳遞給超級視圖。
但是,我認爲如果兩個不同控制器的用戶界面存在細微差別,我們可以重用視圖。
這實際上是一個複雜的視圖層次結構的常見情況。由於iOS 5,UIViewController
使您可以添加子視圖控制器。當您添加子控制器時,您還將子視圖添加到控制器的視圖中。
另一方面,您不應該將視圖控制器的視圖添加到另一個視圖控制器而不將其添加爲子視圖控制器。
但是,不要濫用它。你應該這樣做時
UINavigationController
或UISplitViewController
東西)實現了一組控制器的容器
+1「查看回調方法不保證能夠被調用」當我試圖找出爲什麼不調用回調函數時,我有一段有趣的時間。結果?我在一個'UINavigationController'裏有我的控制器,這個行爲很奇怪。 – Sulthan 2012-11-21 09:25:21