因为我们正在组建团队,所以我们确实需要在iOS应用程序项目中拥有多个故事板。
如果您使用标签栏控制器,我会在某处看到您不能拥有多个故事板,但我相信我已经成功了。
我的问题是:
我有两个故事板,Main.Storyboard
和Settings.storyboard
。请注意,在MAIN中,我将入口点嵌入到新的Tab Bar Controller中,并通过Interface Builder添加了两个视图。
和:
以编程方式,我想添加第三个标签,该标签位于另一个故事板中的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(尽管它没有显示图标或文本) - 这让我想到了我的上一个问题:
答案 0 :(得分:3)
如果你想设置正确的图标,你应该:
UIViewController
添加到UITabBarController
。或者只是以编程方式添加按钮(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)
是的,这很实用。将故事板分离到模块是个好主意。
这个项目可以为您节省大量时间,而不是自我攻击:RBStoryboardLink。作者很好地写了关于使用故事板的提示:UIStoryboard Best Practices
答案 2 :(得分:0)