在保留选项卡栏控制器的图标和文本的同时使用故事板引用

Use Storyboard References While Retaining Icons & Text for Tab Bar Controller

我开始重构我的一个项目以使代码更易于管理,并且选项卡栏控制器丢失了其图标,表示哪个选项卡代表什么。没有这个我有点迷失了哪个选项卡用于 re-ordering 目的。

当我使用故事板引用时,如何让图标再次显示在标签栏控制器上?

参考我附上的图片。请注意前 3 个选项卡是如何 'blank',但我尚未重构的其他选项卡如何显示图标和标题。

对于那些不熟悉故事板参考的人,我正在按照这里的教程进行操作:http://code.tutsplus.com/tutorials/ios-9-staying-organized-with-storyboard-references--cms-24226

正确显示图标集的任务情节提要示例

首先,在标签栏控制器所在的情节提要中,应该有引用情节提要的场景。

只需点击标签关联的场景,然后点击底部的标签栏,然后进入属性检查器,您就可以为其分配一个新图标。

更新 - 这种方法似乎不再适用于 Xcode 9.

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

  1. 将第一个要嵌入到tab中的UIViewController放在 与 UITabViewController 相同的故事板。
  2. Ctrl + 从标签栏控制器拖动到内容视图 控制器像往常一样建立连接。这会 自动将 UITabBarItem 添加到内容视图的底部 控制器。
  3. Select 内容视图控制器。
  4. 单击“编辑器”菜单并选择“重构到故事板”...

  5. UITabBarController 选项卡现在将指向新的故事板 参考...

  6. ...并且内容视图控制器保留了 UITabBarItem 来自 标签栏关系。它现在将正常出现在应用程序中。

这似乎是另一个对我有用的解决方案,没有改变你所经历的方法:

  • 保留 Storyboard 引用
    • 转到引用故事板
    • 中的初始视图控制器
    • 标签栏项添加到场景
    • 像在 UITabBarController 故事板中那样配置它
    • 清洁 & 运行
    • 对所有 故事板引用重复此操作

编码愉快!

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

希望对您有所帮助! :)

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

  1. 创建对所需故事板的故事板引用(如果它位于外部框架中,则包括正确的包标识符)。
  2. Ctrl-drag 从选项卡栏控制器到您刚刚创建的引用和 select "Relationship Segue > view controllers" 从出现的上下文菜单。
  3. 标签栏现在应该显示一个方形图像,旁边有标题 "Item"。单击并拖动此项以根据需要在栏中重新排列它。
  4. 在目标视图控制器(应该是引用故事板中的第一响应者)中,创建一个 Tab Bar Item 并在属性面板。

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

  1. 创建一个继承自 UITabBarController 的新 class。
  2. 重写 viewWillLayoutSubviews 如下:

    override func viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()
    
        // Set the tab bar image at runtime
        if let exampleTab = tabBar.items?.first(where: { [=10=].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. 将选项卡栏控制器的类型更改为您创建的子class(从故事板编辑器中的身份面板)。

最后,标签栏项目现在应该在运行时正确显示。如果有人知道如何在编译时(在故事板编辑器中)为外部框架中的故事板正确显示,请告诉我。

如果您在场景之前嵌入了一个导航控制器,您就可以像往常一样编辑它。

Select 然后你的故事板参考:

转到顶部并单击编辑器 > 嵌入 > 导航控制器

Tab bar controller with embedded navigation controller and linking storyboard reference