2013-07-19 35 views
3

我有一個導航控制器的故事板,導致我想要重用的UIVIewController。該UIVIewController有一個ParentUIViewController,它具有所有我正在重用的UIVIewController的所有基本功能。使用故事板重複使用自定義UIVIewController的孩子

目前我正在複製和粘貼(meh),然後我將UIViewController的類更改爲我想要使用的ChildUIVIewController(ChildUIViewController擴展了ParentUIViewController)。

但這聽起來像一個不好的解決方案。每次我想以可視方式更改ParentViewController時,我需要手動更新所有其他ChildViewController。

我試圖爲ParentViewController創建一個xib,但xib未加載because I need a xib with the name of the ChildViewController。我創建了它,然後說這個類是ParentViewController,但它在segue中崩潰。

編輯

我已經創造了我的問題

https://github.com/tiagoalmeida/storyboardexample

注意,ParentViewController擁有一套邏輯方式更加複雜,沒有說明存在的狀態的例子。另外請注意,我也在使用TableView。我希望這可以說明問題。

回答

1

將parentViewController和UI部件上的邏輯保留在子項UIViewControllers上。如果您需要創建一個新的UIViewController,您將創建一個將具有相應XIB的子項(或者除去XIB並手動創建界面)。

+0

我必須複製並粘貼每個孩子的意見?如果兩個Childs共享相同的UI,請將文件所有者作爲您的「ParentViewController」,這與在故事板中使他們具有相同的效果:/ –

+0

不。如果兩個孩子分享大部分相同的代碼,則創建一個新的'ParentViewController'。所以你會有這樣的:'childViewController:parentViewController:grandParentViewController'。在這種情況下,'grandParentViewController'將具有每個'UIViewController'的共同點,並且新的'parentViewController'將擁有兩個孩子的邏輯。 – Peres

+0

每個孩子共享相同的用戶界面。所以你建議我爲每個孩子創建一個xib,並將該文件的所有者作爲ParentViewController(我將文件的所有者作爲ChildViewController)?我在你的grandParentViewController邏輯上變得有點失落。 –

0

您是否考慮通過「幻像按鈕」循環回到同一個UIViewController

看一看這樣的:UIStoryboard Power Drill, Batteries included

從本質上講,你可以拖動Bar Button Item到故事板(在1視圖控制器,急救員和退出圖標下的視圖控制器黑色的小條,對不起,我不不要回想起這個叫做什麼),那麼你可以控制+從那個按鈕拖回到UIViewController推Push賽。這應該在Storyboard中創建一個循環循環。接下來你需要做的就是給這個標識符一個標識符,用編程的方式從你的代碼中調用它,使用[self performSegueWithIdentifier:],然後實現-(void)prepareForSegue:並使用[segue destinationViewController]來有條件地設置標題和可能的某些標誌,這樣你就可以識別何時使用不同類型的提取(或其他代碼變體)在同一個類代碼中。

+0

這很有趣,謝謝你的帖子。不過,如果我將它分離到類層次結構中,我相信它更易於理解代碼。但是,這是一種可能的方法,如果我找不到更好的解決方案,我可能會使用它。 –