【问题标题】:Subclassing a UIViewController from multiple storyboards从多个故事板子类化 UIViewController
【发布时间】: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)?

【问题讨论】:

    标签: ios xcode


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢保罗,我正在寻找这方面的确认。
    猜你喜欢
    • 2013-02-04
    • 2012-12-16
    • 2012-09-30
    • 1970-01-01
    • 2017-04-28
    • 2014-11-18
    • 2023-03-05
    • 2015-07-07
    • 2016-02-29
    相关资源
    最近更新 更多