2012-02-24 42 views
0

這是正確的,當ViewController在其'方法(讓我們說viewDidLoad或viewWillAppear)內創建另一個ViewController?UIView&UIViewControllers設計模式

在我的情況 - 我有一個視圖A,包含幾個其他視圖 - B和C,它們本身非常複雜,所以爲它們設計了特殊的視圖控制器vcB和vcC,並且這些視圖控制器在vcA內創建視圖控制器A.

可以嗎?例如,如果vcA將自己設置爲vcB的代理,該怎麼辦?這意味着,vcB將保留vcA。在這種情況下,要正確釋放所有對象,我們需要在某處將vcB的委託設置爲零,但什麼時候可以這樣做呢? viewWillDisappear:,viewDidDisappear:或smth。其他?

我確定這不是唯一的情況,問題出現了,所以我正在尋找你的意見如何正確設計視圖控制器之間的這種交互。

回答

1

我親眼目睹了教條式的堅持理念只有一個視圖控制器應該同時運行。至於我自己,我傾向於同時使用多個視圖控制器,如果它簡化了總體設計(降低了複雜性),並使設計管理更容易。正如你可以在recent response that I posted中看到的那樣,在我看來,蘋果公司已經通過提供對自定義內容視圖控制器的支持而向相同的方向發展,允許您同時操作多個視圖控制器。

約拿威廉姆斯的博客值得一讀,只是要知道你可能需要處理什麼。但坦率地說,我沒有任何與他的建議相矛盾的問題。 (該帖子大約一年。)

視圖控制器的一個關鍵是保存它正在管理的視圖的委託方法。該觀點實際上並不關心什麼對象扮演其代表。所以如果你想要一個和單VC的觀點更加和諧的設計,你可以把委託方法放到一個子類NSObject中,而不是稱之爲視圖控制器。你很可能不得不創建一些UIViewController已經擁有的方法。但是,您不必將其稱爲視圖控制器。我,我只是一個UIViewCcontroller的子類。

0

通常,您不希望單獨的視圖控制器用於其他控制器的子視圖。這不是視圖控制器設計工作的方式。

蘋果的導航和標籤欄控制器做到這一點,但他們令人髮指的複雜和非標準(這大概是爲什麼你不能繼承他們。)