两个StoryBoards,一个标签栏控制器

时间:2014-10-06 06:44:46

标签: ios swift uitabbarcontroller viewcontroller

因为我们正在组建团队,所以我们确实需要在iOS应用程序项目中拥有多个故事板。

如果您使用标签栏控制器,我会在某处看到您不能拥有多个故事板,但我相信我已经成功了。

我的问题是:

  1. 这是一个好习惯吗?
  2. 您在代码中看到任何未保存的内容吗?
  3. 你能预见到任何错误吗?
  4. 我有两个故事板,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. 如何添加图标和标题,因为在我添加视图后我似乎无法弄清楚它?

3 个答案:

答案 0 :(得分:3)

广告。 4

如果你想设置正确的图标,你应该:

  1. 开始时,通过情节提要将新的UIViewController添加到UITabBarController
  2. 为此标签设置正确的图标。
  3. 删除连接。
  4. 将此控制器复制并设置到第二个故事板并将其设置为初始视图控制器。
  5. 或者只是以编程方式添加按钮(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. 有时会发生故事板和编辑器的关键问题可能无法打开它。在某些情况下,您可能会被迫恢复故事板中的更改。使用多个故事板可以减少您完成更改的可能性。
    4. Ad 2。

      您是否在代码中看到任何未保存的内容? 你的代码看起来很好。唯一可能让我担心的是你直接使用故事板的名称。如果您在多个地方使用设置,您应该“打包”将控制器放在单独的方法/类中。如果您将重命名故事板名称可能会出现问题 - 那么您将不得不找到所有更改它们的事件。如果你会错过其中一个,那么可能会出现一些问题。无论如何,我不认为提取这种方法是必须的。

      Ad 3。

      你能预见到任何错误吗? 我没有看到任何可能发生的问题。

答案 1 :(得分:1)

是的,这很实用。将故事板分离到模块是个好主意。

这个项目可以为您节省大量时间,而不是自我攻击:RBStoryboardLink。作者很好地写了关于使用故事板的提示:UIStoryboard Best Practices

答案 2 :(得分:0)

你不需要做任何黑客攻击.... 您可以在一个故事板中创建一个标签栏 enter image description here

然后创建一个故事板参考 enter image description here

然后将其添加到标签栏中 enter image description here

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

然后WALAAAAHHH!你有两个故事板一个TAB控制器! YAYYY!