2012-12-27 61 views
10

我有一個「容器」viewController,它使用storyboard保存幾個容器視圖。 每個容器視圖都有一個指向嵌入式視圖控制器視圖的鏈接。在故事板中將UIViewController xib加載到ContainerView中

由於上一個大項目工作IM,事實證明,故事板文件是巨大的,並含有大量的「孩子」 viecontrollers查看佈局。當少數人需要同時處理這個文件時,這將是一個處理該文件的問題。那對我不好。 我想知道是否加載到每個容器的方式查看viewcontroller的xib文件,並仍在使用故事板。

含義,每個視圖控制器創建的.xib文件,而不是抱着他們在故事板本身,並將其鏈接到故事板的容器意見。

謝謝,

回答

5

是的,你可以。幾點意見:

  1. 所有你需要做的就是放入我們在使用NIB時使用的那種代碼。在容器的情況下,這意味着the typical container methods。如果您未通過代碼進行遏制,請參閱「視圖控制器編程指南」中的Creating Custom Container View Controllers底線,當您轉換到非故事板場景(或添加非故事板子視圖控制器)時,只需在基於NIB的環境中對其進行編碼即可。您不能在故事板中表示這個基於NIB的場景。但是你剛纔得到的控制器像你總是這樣用筆尖:

    SecondViewController *controller = [[SecondViewController alloc] initWithNibName:nil bundle:nil]; 
    
  2. 顯然你失去很多的使用故事板的好處(例如大小在父場景的容器視圖的基礎上孩子的場景),但你並沒有比在NIB環境下更糟糕。但在回答你是否可以「將它們鏈接到故事板中的容器視圖」的問題上,你不能在故事板本身中表示這種關係,而是通過編程方式將它們聯繫起來。

  3. 如果您的單獨團隊正在單場景環境中工作,則可以使用此NIB方法。不過,你也應該考慮一下,每個邏輯團隊都有一個故事板。當你在故事板之間轉換時,你仍然不得不訴諸代碼,就像你在這個NIB方法中做的那樣,但是如果你的一個團隊有多個場景來處理,他們可以在他們的項目部分中享受故事板的好處。當你想要去的第一個場景在接下來的故事板,您可以:

    UIStoryboard *secondaryStoryboard = [UIStoryboard storyboardWithName:@"SecondStoryboard" bundle:nil]; 
    SecondViewController *controller = [secondaryStoryboard instantiateInitialViewController]; 
    
  4. 如果你的孩子需要過渡到你的故事板新的場景,我覺得有用我自己parentStoryboard屬性添加到我的孩子控制器,如果您需要執行類似instantiateViewControllerWithIdentifier的操作,它可以很有用。顯然,如果你不轉換到新的控制器,你可能不需要那樣做,但是如果你有,UIStoryboard屬性可以是有用的。

+0

謝謝Rob,我以前一直在遏制工作,我試圖在這個項目中使用它 - 它工作正常,但我只是想知道是否有辦法「享受兩個世界」,但它似乎是不可能的。故事板自動將我的childViewControllers作爲兒童使用,效果很好。無論如何,你在3,4中寫的是非常有趣和生病的嘗試。 – Lirik

+0

@LironK是的,我得到你想要做的,但如果你有多個故事板(和/或NIBs),那麼你失去了一些故事板的好處。我只是不認爲你可以在故事板之間或故事板和NIB之間延續。恐怕你必須在代碼中做到這一點。抱歉。 – Rob

12

可以移動您的視圖控制器佈局到一個單獨的廈門國際銀行。正如你所說,這是一個非常方便的方式來分享故事板上的佈局。

在故事板中設置容器視圖時,請確保您刪除嵌入式ViewController中提供的視圖。將ViewController的自定義類設置爲您的類名稱。將xib命名爲與該類匹配(例如FooViewController.xib,以便在加載FooViewController.m時找到它)。

如果不刪除故事板視圖控制器佈局中的視圖,則會看到空改爲查看。您的視圖控制器中的viewDidLoad方法將不會被調用,因爲View是默認的Storyboard視圖。

我在iOS 7以前的項目中使用iOS 8的Xcode 6.1。

+0

謝謝!你拯救我的一天! – Cleversou

+1

這應該是正確的答案。從NIB嵌入子視圖控制器的故事板專用方法。完善。謝謝。 –