从它的类型创建一个 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”,我从它的文档中全部遵循
c_cpp 当叶节点与内部节点不同并且内部节点恰好有两个子节点时,从它的PostOrder创建二叉树。
Angular CLI 生成的库 - 无法从它的模块导入组件