![](/img/trans.png)
[英]How to add a UIViewController's view as a subview to a UITableViewCell?
[英]Is it advisable to add a UIViewController's view to another UIViewController's view?
是否可以將UIViewController
的view
添加到另一個UIViewController
的view
?
請解釋為什么這是一個好的做法或一個不好的做法。
蘋果公司以及大多數遵循Apple指南的人都會告訴你這是不好的做法,因此Apple添加了ViewController包含(childViewControllers)。 不幸的是,大多數人盲目地遵循這一點,並不會告訴你為什么這是不好的做法。 而且我很高興你這么做。
事實上,在模型 - 視圖 - 控制器體系結構中,視圖應該是可重用的,無論它們包含什么內容,因此視圖和控制視圖內容的對象不應該相同。 這正是UIViewController在iOS5之前所做的事情Apple不鼓勵你多次使用它們,而這是非常合乎邏輯的事情。 當然這很令人困惑,許多人忽略了指導方針,無論如何都做了,包括我自己,應用程序工作正常並通過了應用商店驗證,這引起了更多的混亂。 結果是,直到今天,人們仍然在Apple塌陷並給我們自定義容器ViewControllers一年多后就此問題。 我已經看到人們經常使用復雜的答案來回答這個問題,只要將UIViewController重新創建為一個繼承自NSObject的類來解決非常簡單的問題。 僅僅因為Apple不鼓勵使用UIViewControllers,甚至不知道為什么。
由於將ViewController的視圖添加為子視圖通常可以很好地工作,並且iOS4中仍然沒有ViewController包含,許多人仍然支持,太多人不打擾使用ViewController包含。 這是更清潔的解決方案,當您想在ViewControllers中使用ViewControllers時,您應該盡可能使用它。 如果沒有,在大多數情況下,您應該能夠簡單地將ViewController的視圖添加為子視圖,您只需知道在哪些情況下。
如果您只是將ViewController的視圖添加到另一個視圖,那么您可以期待以下內容:
我絕對不會鼓勵它,但我也不會勸阻它。 這是情境化的,如果你不再需要支持iOS4那么你可以避免它。 但是,如果你記住上面的列表,那么它也不會造成任何傷害,你的應用程序將正常工作。
有時它沒關系,有時它不是。 如果沒有顯示一些圖表並解釋視圖控制器層次結構和視圖層次結構之間的關系,那么很難給出更好的答案。
幸運的是,Apple已經做到了。 觀看WWDC 2011中的“實現UIViewController遏制”視頻,詳細說明何時可以,何時不可以。
這實際上是復雜視圖層次結構的常見情況。 從iOS 5開始, UIViewController
允許您添加子視圖控制器。 添加子控制器時,還要將子視圖添加到控制器的視圖中。
另一方面,您永遠不應將視圖控制器的視圖添加到另一個視圖控制器,而不將其添加為子視圖控制器。
但是,不要濫用它。 你應該這樣做
UINavigationController
或UISplitViewController
) 你可能會逃脫它,但可能有更好的方法。 認為兩者都試圖操縱視圖似乎是合理的。 我的回答是否定的。
你想達到什么目的?
當然,您可以將UIViewController的視圖添加到另一個UiViewController的視圖中,至少作為類變量。 但我無法理解這個解決方案的最終目標。 我認為這是一個不好的做法,因為應用程序界面的復雜性正在增加。
通常在模型 - 視圖 - 控制器架構中,我們可以重用視圖。
但是對於UIViewController,它可能並不總是好主意。 它可能會使項目架構變得復雜,因為根據Apple文檔視圖與視圖控制器緊密綁定,因此它可能不容易管理。
從UIViewController引用:視圖控制器與它們管理的視圖緊密綁定,並參與用於處理事件的響應器鏈。 視圖控制器是UIResponder類的后代,並插入到托管根視圖與其超級視圖之間的響應程序鏈中,后者通常屬於不同的視圖控制器。 如果視圖控制器的視圖不處理事件,則視圖控制器可以選擇處理事件,也可以將事件傳遞給superview。
但是,我認為如果兩個不同控制器的UI存在細微差別,我們可以重用視圖。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.