重用Storyboard ViewController-父/子Viewcontroller

问题描述 投票:0回答:1

我想创建一个ViewController基类,可以在整个项目中重用。

我想创建一个弹出ViewController,我可以使用多个子类进行调整,这些子类都共享相同的基本布局(从基类继承)。我希望在故事板场景中定义基类的布局,以尝试遵循苹果的指南(不使用xib)。这还包括在接口构建器中而不是在代码中设置所有约束。

我只想做正确的事:)

[我的问题是,如果我开始对ParentViewController(在Storyboard中具有关联的场景)进行子类化,则该应用程序将不允许我显示ViewController。如果通过情节提要ID实例化,则无法将其强制转换为子类。如果我通过创建子类ViewController的实例进行实例化,则它将不会显示,因为情节提要文件中的UI已“锁定”到ParentViewController。

我如何在情节提要文件中创建具有关联场景的base-ViewController,可以使用各种子类(或类似类)。具体来说:我想制作一个弹出窗口,根据使用情况,弹出窗口可能会略有不同。我不想为每个变体制定初始化方法,因为那样会破坏尝试拆分代码的目的。

感谢您的帮助或评论!

swift uiviewcontroller superclass
1个回答
0
投票

object_setClass(设置对象的类。)将使用BViewController Class覆盖AViewController的实例。因此,在AViewController之上,您可以添加更多方法。

当您有类似的ViewController且有少量更改时。您必须创建不同的ViewController。使用此方法,您可以在带有故事板的基本viewcontroller上创建并重用该viewcontroller。

 class BViewController{
       static func vcInstanceFromStoryboard() ->BViewController? {
            let storyboard = UIStoryboard(name: "AViewController"), bundle: UIBundle.main)
            let instance = storyboard.instantiateInitialViewController() as? AViewController
            object_setClass(instance, BViewController.self) // 
            return (instance as? BViewController)!
        }
    .....
    } 

This is an example of how do we use it:
let vc = BViewController.vcInstanceFromStoryboard()
self.present(vc , animation : true)
© www.soinside.com 2019 - 2024. All rights reserved.