swift - 通过覆盖 init 从 Storyboard初始化 View Controller

标签 swift uiviewcontroller storyboard init

我在 Storyboard中定义了一个 ViewController 实例。我可以通过以下方式初始化它

var myViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("myViewControllerIdentifier") as! ViewController

有没有办法覆盖 ViewController 的 init 方法,以便我可以使用初始化它

var myViewController = ViewController()

我尝试覆盖 init

convenience init() {
    self = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("SearchTableViewController") as! SearchTableViewController
}

但是编译器不喜欢那样。有什么想法吗?

最佳答案

便利构造器必须始终委托(delegate)给同一类的指定构造器,并且指定构造器必须调用父类(super class)构造器。

由于父类(super class)没有合适的初始化器,类工厂方法可能会更好:

static func instantiate() -> SearchTableViewController
{
    return UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("SearchTableViewController") as! SearchTableViewController
}

然后使用:

var myViewController = SearchTableViewController.instantiate()

关于swift - 通过覆盖 init 从 Storyboard初始化 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31821883/

相关文章:

swift - 无法更新 NSMutableDictionary?

ios - 不能再在 CorePlot 中子类化 CPTGraphHostingView (v2.3) 吗?

ios - 在关闭中转到另一个 ViewController 不能快速工作

swift - 委托(delegate) - 从不同的 View Controller 更改变量

ios - "automatically adjusts font requires using a dynamic type text style"警告是什么意思?

xcode - 自动多行标签swift

ios - 如何在世界追踪中显示人脸

ios - 创建一个通用的 UViewController 初始化器

ios - iOS 中的可扩展 View

wpf - 在WPF中使用动画改变窗口大小