簡體   English   中英

兩個StoryBoards,一個標簽欄控制器

[英]TWO StoryBoards, ONE Tab Bar Controller

因為我們正在組建團隊,所以我們確實需要在iOS應用程序項目中擁有多個故事板。

我在某處讀到,如果你使用的是Tab Bar Controller,你就不能擁有多個故事板,但我相信我已經成功了。

我的問題是:

  1. 這是一個好習慣嗎?
  2. 你看到代碼中沒有任何東西嗎?
  3. 你能預見到任何錯誤嗎?

我有兩個故事板, Main.StoryboardSettings.storyboard 請注意,在MAIN中,我將入口點嵌入到新的Tab Bar Controller中,並通過Interface Builder添加了兩個視圖。

MAIN.STORYBOARD

和:

SETTINGS.STORYBOARD

從程序上講 ,我想添加第三個選項卡,該選項卡將轉到另一個故事板中的UIViewController 我用以下代碼完成了這個(在Main的ViewController代碼中的viewDidLoad中):

var settingsStoryboard:UIStoryboard = UIStoryboard(name: "Settings", bundle: nil)
var initialViewController:UIViewController = settingsStoryboard.instantiateViewControllerWithIdentifier("SettingsMain") as UIViewController

var viewsInTBC = self.tabBarController?.viewControllers
viewsInTBC?.append(initialViewController)
self.tabBarController?.viewControllers = viewsInTBC

令人驚訝的是,它有效! 當我點擊視圖控制器中的第三個項目時,我實際上可以看到View(盡管它沒有顯示圖標或文本) - 這讓我想到了我的上一個問題:

  1. 我如何添加圖標和標題,因為在我添加視圖后我似乎無法弄明白?

廣告。 4

如果你想正確設置圖標,你應該:

  1. 在開始時,通過storyboard將新的UIViewController附加到您的UITabBarController
  2. 為此選項卡設置適當的圖標。
  3. 刪除連接。
  4. 將此控制器復制並設置到第二個故事板並將其設置為初始視圖控制器。

或者只是以編程方式添加按鈕(XML代碼):

    <!--Settings-->
    <scene sceneID="Cac-NB-uhR">
        <objects>
            <navigationController definesPresentationContext="YES" id="BkC-WO-8Bx" sceneMemberID="viewController">
                <tabBarItem key="tabBarItem" title="Settings" image="icoAxis" id="PEg-DC-QVf"/>
                <navigationBar key="navigationBar" contentMode="scaleToFill" id="4RT-g8-Hp3">
                    <autoresizingMask key="autoresizingMask"/>
                </navigationBar>
                <connections>
                    <segue destination="bvJ-l1-eMt" kind="relationship" relationship="rootViewController" id="FJJ-h4-ftX"/>
                </connections>
            </navigationController>
            <placeholder placeholderIdentifier="IBFirstResponder" id="Ane-ce-dgm" userLabel="First Responder" sceneMemberID="firstResponder"/>
        </objects>
        <point key="canvasLocation" x="947" y="1037"/>
    </scene>

一開始我在main.storyboard中得到了我的導航控制器。 現在從UITabBarViewController派生:

- (void)viewDidLoad {
    [super viewDidLoad];
    UIStoryboard *settingsStoryboard = [StoryboardManager getSettingsStoryboard];
    UINavigationController *navigationController = [settingsStoryboard instantiateInitialViewController];

    NSMutableArray *arr = [self.viewControllers mutableCopy];
    [arr addObject:navigationController];
    [self setViewControllers:arr];
}

編輯

回答你的其他問題:

廣告1。

這是一個好習慣嗎? 是的。 如果您在項目中使用故事板,並且您的項目覆蓋了一個故事板中保存的數十個視圖控制器可能會導致:

  1. 故事板將打開非常緩慢,例如10秒。 它真的讓開發者感到厭煩。
  2. 當許多開發人員在該故事板中添加/修改/刪除控制器時,合並沖突。
  3. 有時會發生故事板和編輯器的關鍵問題可能無法打開它。 在某些情況下,您可能會被迫恢復故事板中的更改。 使用多個故事板可以減少您完成更改的可能性。

廣告2。

你看到代碼中沒有任何東西嗎? 你的代碼看起來很好。 唯一可能讓我擔心的是你直接使用故事板的名稱。 如果您在多個地方使用設置,您應該“打包”將控制器放在單獨的方法/類中。 如果您將重命名故事板名稱可能會出現問題 - 那么您將不得不找到所有更改它們的事件。 如果你會錯過其中一個,那么可能會出現一些問題。 無論如何,我不認為提取這種方法是強制性的。

廣告3。

你能預見到任何錯誤嗎? 我沒有看到任何可能發生的問題。

是的,這很實用。 將故事板分離到模塊是個好主意。

這個項目可以為您節省大量時間,而不是黑客攻擊自己: RBStoryboardLink 作者對使用故事板的提示進行了很好的撰寫: UIStoryboard Best Practices

你不需要做任何黑客攻擊....你在這樣的故事板中創建一個標簽欄 在此輸入圖像描述

然后,您創建一個故事板參考 在此輸入圖像描述

然后將其添加到標簽欄中 在此輸入圖像描述

然后,您更改要使用的故事板:

然后WALAAAAHHH! 你有兩個故事板一個TAB控制器! YAYYY!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM