使用Storyboard引用来保留选项卡栏控制器的图标和文本

21

我开始重构我的一个项目,以使代码更易管理,但标签栏控制器丢失了它的图标,无法区分每个标签代表什么。因此,在重新排序时,我有点迷失。

当使用Storyboard引用时,如何再次显示标签栏控制器的图标?

请参考我附加的图片。请注意,前三个选项卡是“空白”的,而我尚未重构的其他选项卡则显示了图标和标题。

对于那些不熟悉故事板引用的人,我正在遵循这里的教程:http://code.tutsplus.com/tutorials/ios-9-staying-organized-with-storyboard-references--cms-24226

输入图像描述

Tasks Storyboard样本以正确显示图标集

输入图像描述

6个回答

31

看起来还有另一种解决方法,不需要修改你所采用的方法:

  • 保留故事板引用,如图所示: 图片描述
    • 进入所引用的故事板中的初始视图控制器
    • 在场景中添加选项卡栏项目,如下图所示: 图片描述
    • 像在UITabBarController故事板中做的那样配置它,如下图所示: 图片描述
    • 清理并运行 图片描述
    • 对所有故事板引用重复以上步骤

祝你编码愉快!


15

首先,在选项卡控制器所在的故事板中,应该有一个与之相关的场景。

只需单击与选项卡相关联的场景,然后单击底部的选项卡栏,接着转到属性检查器,您就可以为其分配新的图标。输入图片描述


这个不起作用,我知道如何设置图标,但不知道如何在从另一个故事板引用时在界面构建器中显示它。顺便说一下,当我编译时,这将会起作用,我可以看到所有的图标都很清晰。只是在界面构建器中看不到它们。 - Joseph Astrahan
这篇文章也证实了这可能是一个bug的问题?(http://useyourloaf.com/blog/refactoring-with-storyboard-references/),在这里找到了另一个讨论,但没有真正的答案(http://www.discuzfeed.com/code/ltezrurp-tab-bar-icon-and-title-not-showing-with-storyboard-references.html),看起来是一个普遍的问题。 这里有更多的讨论(https://forums.developer.apple.com/thread/5647) - Joseph Astrahan
1
你知道吗,我想我现在明白你的意思了,我没有意识到在任务场景的参考部分仍然可以设置它。你的答案是正确的,但我认为你可能需要更清楚地表达,我会提出修改建议。 - Joseph Astrahan
虽然这个可以工作,但似乎存在问题或者只是表面上看起来没问题。标签栏项目仍需要在引用的故事板上显式设置,才能正确呈现。 - famousgarkin
这对我有用:https://dev59.com/LlsX5IYBdhLWcg3wf_g8#33759963 - xlsmearlx
显示剩余2条评论

4

更新 - 这种方法似乎在Xcode 9中不再适用。

以下是正确显示选项卡的方法:

  1. 将将要嵌入选项卡的第一个UIViewController放置在与UITabViewController相同的storyboard中。enter image description here
  2. 从选项卡控制器到内容视图控制器进行Ctrl + Drag,以按照通常方式建立连接。这会自动将UITabBarItem添加到内容视图控制器底部。enter image description here
  3. 选择内容视图控制器。
  4. 单击“编辑”菜单,选择“重构为Storyboard…”enter image description here

  5. 现在,UITabBarController选项卡将指向新的storyboard引用…enter image description here

  6. … 内容视图控制器保留来自选项卡条关系的UITabBarItem。它现在会在应用程序中正常显示。enter image description here

1
在Xcode 9 beta 6中,被重构为自己的故事板的视图控制器没有保留标签栏。 - vikzilla
它对我来说很有效,使用已加载了App Store的Xcode 9。感谢这个教程。请再次尝试确认一下,@vikzilla。 - Matthew Ferguson

1

1

由于某种奇怪的原因,我无法在IB中看到我的参考视图控制器中的选项卡栏。但是,在选择它并展开文档大纲时,我可以在我的视图列表中看到它。我可以通过它进行更改。

Document outline view

enter image description here

希望这有所帮助! :)

1

XCode 11.1: 下面的方法可以在运行时显示所需的选项卡标题和图标:

  1. 创建一个指向所需故事板的故事板引用(如果它位于外部框架中,则包括正确的捆绑标识符)。
  2. 从选项卡控制器向您刚刚创建的引用进行Ctrl-drag,并从出现的上下文菜单中选择“Relationship Segue > view controllers”。
  3. 现在,选项卡应该显示一个带有标题“Item”的正方形图像。单击并拖动此项以按所需方式重新排列它。
  4. 在目标视图控制器(应是引用故事板中的第一个响应者)中,创建一个选项卡项目并在属性面板的Bar Item部分设置Title和Image属性。

此时,在运行时应该显示正确的标题(但在故事板编辑器中不会在编译时显示)。如果图标也在那里,那太好了。如果没有,请尝试检查图像引用是否有效,并且位于与选项卡项目相同的模块中(即位于同一框架中)。如果仍然无法显示,请使用以下hackish解决方法:

  1. Create a new class which inherits from UITabBarController.
  2. Override viewWillLayoutSubviews as follows:

    override func viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()
    
        // Set the tab bar image at runtime
        if let exampleTab = tabBar.items?.first(where: { $0.title == "ExampleTitle" }) {
            // To insert an image literal, type "Image" and select Image Literal
            // from the autocomplete menu. An icon should appear.
            // Double-click the icon and select the desired image from the grid.
            exampleTab.image = Image Literal
        }
    }
    
  3. Change the type of your tab bar controller to the subclass you created (from the Identity panel in the storyboard editor).
最后,选项卡条目现在应该在运行时正确显示。如果有人知道如何使它在编译时(在storyboard编辑器中)对于外部框架中的storyboard也能正确显示,请告诉我。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接