从多个故事板子类化 UIViewController

Posted

技术标签:

【中文标题】从多个故事板子类化 UIViewController【英文标题】:Subclassing a UIViewController from multiple storyboards 【发布时间】:2017-04-03 17:30:11 【问题描述】:

我想子类化一个视图控制器,其中超类和子类位于两个单独的故事板中。超类具有通过它的故事板连接的 IBOutlets,子类也是如此。

问题: 是否可以创建子类,以便从情节提要中使用超类的 IBOutlet 连接? (AKA IBOutlets 不是 nil,并且 awakeFromNib 被调用)

设置:

SuperClass 是使用带有 IBOutlet UIView 属性 baseContainerView 的 BaseStoryboard 的 BaseViewController。

SubClass 是使用 SpecialStoryboard 的 SpecialViewController

SpecialViewController 继承自 BaseViewController。

当前问题:

如果我从它的故事板 (SpecialStoryboard) 实例化一个 SpecialViewController 的实例,当调用 viewDidLoad 时,它的超类 (BaseViewController) 上的 containerView 属性为零。是否也可以从它的情节提要中加载 SpecialViewController 的超类(BaseViewController)?

【问题讨论】:

【参考方案1】:

类支持继承,但场景不支持。

当您对视图控制器进行子类化时,它会继承其超类中存在的任何出口,但这些出口需要在您使用子类的场景中显式分配一个值。

场景指定其视图控制器的类,但视图控制器类没有“返回”到使用它的场景的链接。场景和视图控制器类之间存在“多对一”关系。如果您的问题是可能的,那么 ios 将如何知道您想从使用视图控制器的潜在众多场景中的哪一个“继承”?

仅仅因为超类定义了出口foo并且您在某些场景中使用了超类,并不意味着foo如果您在不同的场景中使用然后使用子类会有一些价值(无论哪个这些场景在故事板上)。您需要在使用子类的场景中直接将对象分配给foo

【讨论】:

谢谢保罗,我正在寻找这方面的确认。

以上是关于从多个故事板子类化 UIViewController的主要内容,如果未能解决你的问题,请参考以下文章

Parenting父类化

当我在故事板中将顶部约束设置为 0 时,如何避免 20 边距?

实战,Vue 项目中,将 API “类化”

文档向手把手教你的队友用git+LaTex管理板子

无需超类化或子类化即可实现类似 CContainedWindow 的功能

Delphi一共封装(超类化)了8种Windows基础控件和17种复杂控件