从多个故事板子类化 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的主要内容,如果未能解决你的问题,请参考以下文章
当我在故事板中将顶部约束设置为 0 时,如何避免 20 边距?