class SecondViewController:UIViewController {
required init(coder aDecoder: NSCoder){
super.init(coder: aDecoder)
//Custom logic here
}
}
相当新手问题:
视图控制器(SecondViewController),UIViewController固有的需要一个指定的init函数,如上所述。
在这种情况下,我应该怎么称呼它,因为我不确定"编码器"的价值。应该?我以前将控制器称为:SecondViewController(),但它给出了:
Missing argument for parameter 'coder' in call
我理解必须提供编码器参数,但想知道它的值来自何处。
答案 0 :(得分:6)
感谢@Chackle的回答。最后,我想出的解决方案如下。
我想要的是什么:
SecondViewController
UIViewController
SecondViewController
初始化为SecondViewController()
解决方案:
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
init() {
super.init(nibName: nil, bundle: nil)
//Do whatever you want here
}
如果您创建"required init(coder aDecoder: NSCoder)"
的子类,则必须 UIViewController
。 "super.init(nibName: nil, bundle: nil)"
也是如此,因为这是UIViewController
初始化的方式。
答案 1 :(得分:-1)
initWithCoder
是专门用于Interface Builder的构造函数。这是在界面构建器中创建UIViewController时调用的构造函数。
通过使用'segues'来实例化视图控制器。如果您还不了解segues,我建议您查看一些文档/教程来处理它们。这真的有助于解释事情。
这个小教程教你如何正确使用segue,甚至在View Controllers之间传递数据: http://www.appcoda.com/storyboards-ios-tutorial-pass-data-between-view-controller-with-segue/
编辑: 如果你不想使用segues,那么这些代码可能对你有所帮助(你仍然需要在界面构建器中创建ViewController)
let storyboard = UIStoryboard(name: "MyStoryboardName", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("someViewController") as! UIViewController
self.presentViewController(vc, animated: true, completion: nil)