从它的类型创建一个 UIViewController 具体类

Posted

技术标签:

【中文标题】从它的类型创建一个 UIViewController 具体类【英文标题】:Create a UIViewController concrete class from its type 【发布时间】:2018-09-18 08:45:38 【问题描述】:

我希望从 UIViewController 类型创建一个具体的类,像这样

 func create(with type : UIViewController.Type)->UIViewController
       return type.init(coder: NSCoder())!
    

显然,UIViewController 的指定初始化器只有 init(coder : NSCoder)。而且,当我尝试传入 NSCoder() 时(如上例所示),应用程序崩溃了。

任何人都知道从其类型创建 UIViewController 具体类的更好解决方案吗?还是在这种情况下我传递了错误的 NSCoder ?

【问题讨论】:

你到底想做什么 您是否要保留当前控制器实例的副本? 你不能按原样使用 Storyboard 中的类实例化吗? 【参考方案1】:

代码完成不显示这个选项,但是编译和运行没有问题:

func create(with type : UIViewController.Type) -> UIViewController 
    return type.init()

【讨论】:

【参考方案2】:

如果您只想以编程方式或从 XIB 创建视图控制器,则只需使用基本构造函数。

let viewController = MyViewController()

如果你有一个与类同名的 XIB,那么它会自动加载它。

如果你想从情节提要中加载它,那么你需要在情节提要中为视图控制器定义一个标识符,然后调用:

let storyboard = UIStoryboard(name: "storyboardName", bundle: nil)
storyboard.instantiateViewController(withIdentifier: "myViewControllerIdentifier")

编辑

如果你想要一个特殊的create 函数,你实际上可以像这样为UIViewController 创建一个扩展:

extension UIViewController 
    static func create() -> Self 
        return self.init()
    

然后您可以拨打let myViewController = MyViewController.create()。但是,除非你想在 create 函数中做一些特别的事情,否则它有点不必要。

【讨论】:

以上是关于从它的类型创建一个 UIViewController 具体类的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在使用 jquery 数据表时出现这种类型的错误“TypeError:oColumn is undefined”,我从它的文档中全部遵循

从它的元类python引用一个类的实例

c_cpp 当叶节点与内部节点不同并且内部节点恰好有两个子节点时,从它的PostOrder创建二叉树。

Angular CLI 生成的库 - 无法从它的模块导入组件

你能从它的 ModelForm 中访问一个 Django 模型的“属性”吗?

从它的 datagridview 更新与数据库相对应的数据集