我想创建一个ViewController基类,可以在整个项目中重复使用。
我想创建一个弹出的ViewController,可以对多个子类进行调整,这些子类都共享相同的基本布局(从基类继承)。我希望在故事板场景中定义基类的布局,以尝试遵循苹果的指南(不使用xib)。这还包括在接口构建器中而不是在代码中设置所有约束。
我只想做正确的事:)
我的问题是,如果我开始对ParentViewController(在Storyboard中具有关联的场景)进行子类化,则该应用程序将不允许我显示ViewController。如果通过情节提要ID实例化,则无法将其强制转换为子类。如果我通过创建子类ViewController的实例进行实例化,则不会显示,因为故事板文件中的UI已“锁定”到ParentViewController。
如何在情节提要文件中创建具有关联场景的base-ViewController,可以使用各种子类(或类似类)。 具体来说:我想制作一个弹出窗口,根据使用情况,弹出窗口可能会略有不同。我不想为每个变体制定初始化方法,因为那样会破坏尝试拆分代码的目的。
感谢您的帮助或评论!
答案 0 :(得分: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)