从 Storyboard 继承 ViewController

Posted

技术标签:

【中文标题】从 Storyboard 继承 ViewController【英文标题】:Inherit ViewController from Storyboard 【发布时间】:2020-03-09 11:33:28 【问题描述】:

我有一个名为 CustomComponents.storyboard 的 Storyboard,我在 Storyboard 中设计了 BaseViewController。例如,我在 Interface Builder 中将 BaseViewControllerbackgroundColor 设置为 .green。我从BaseViewController 继承RootViewController。我希望RootViewControllerbackgroundColor.green

这是我的RootViewController

class RootViewController: BaseViewController 


这是我的BaseViewController

class BaseViewController: UIViewController 


两个类都是空的,我刚刚在 IB 中设置了backgroundColor

但是,当我运行应用程序时,我看到了白色背景。但是,当在BaseViewController 中以编程方式设置颜色时,绿色背景颜色将按预期应用到RootViewController

继承在 Storyboard 中设计的 BaseViewController 我缺少什么?基本上,我想在 Storyboard 中设计我的BaseViewController。我做错了什么?

【问题讨论】:

BaseViewController的引用是怎么得到的?? 两者都是空类。我只是继承自BaseViewController 您需要从情节提要中实例化 ViewController,否则无法从中查看更改。将 Stroryboard 想象为 BaseViewController 的实例,而不是类的定义 请检查:***.com/questions/36419948/… && ***.com/questions/4418080/… 【参考方案1】:

只有当您的应用程序最小规格是 ios 13 时,您才能以编程方式执行此操作,因为新的 API 可用于此目的,因为故事板不包含 声明,它是编码实例的存档

因此,如果您的 BaseViewController 具有标识符,您可以将 RootViewController 实例化为编码父为

let rootController = UIStoryboard(name: "CustomComponents", 
    bundle: nil).instantiateViewController(identifier: 
                             "your_base_controller_identifier_here")  coder in
        RootViewController(coder: coder)

或者如果你的控制器是 root

let rootController = UIStoryboard(name: "CustomComponents", 
     bundle: nil).instantiateInitialViewController  coder in
        RootViewController(coder: coder)

【讨论】:

以上是关于从 Storyboard 继承 ViewController的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Storyboard 继承 UICollectionViewFlowLayout

从 StoryBoard 获取对 TableViewController 中左按钮的引用

StoryBoard 处理继承的视图控制器

工程日记之HelloSlide:Swift自定义可视化组件的方法(继承UIView和在StoryBoard中设置)

无法插入新的插座集合 Xcode

如何将 ViewController.swift 连接到 Storyboard 中的 ViewController?