gpt4 book ai didi

swift - 重用 Storyboard View Controller - 父/ subview Controller

转载 作者:行者123 更新时间:2023-11-30 10:50:06 26 4
gpt4 key购买 nike

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

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

我想做的就是正确的事:)

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

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

感谢您的帮助或评论!

最佳答案

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

当你有类似的 View Controller 但有小的变化时。你必须创建不同的 View Controller 。使用此方法,您可以使用 Storyboard在基本 View Controller 上创建并重用该 View Controller 。

 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)

关于swift - 重用 Storyboard View Controller - 父/ subview Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54766400/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com