【发布时间】:2015-08-07 13:43:27
【问题描述】:
我试图找到一些相关的问题,但没有得到任何东西,希望有人能提供帮助。
我在故事板上设置了一些 UIViewController。然后我想在代码中加载其中一个视图控制器并将其推送到导航堆栈上。我想出正确的方法是使用
instantiateViewControllerWithIdentifier
这调用了init(coder: NSCoder),一切都很好,我的程序可以工作,但我希望能够有一个自定义初始化程序,为我的视图控制器设置一些变量。考虑以下几点:
class A : UIViewController {
let i : Int
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
// property self.i not initialized at super.init call
}
}
我显然得到一个错误,因为i 需要在创建对象时指定。有什么解决办法吗?我对将 i 声明为 var 并在稍后配置它不感兴趣,因为这不符合这一点,而且我不再有编译器保证 i 是不可变的。
澄清编辑
假设我有一个当前加载的ViewController,其中包含一些变量i。这个值是可变的并且可以改变。现在假设我想从这个 ViewController 中展示另一个,并用 i 初始化它。
class ViewController: UIViewController {
var i : Int
// ... other things
// in response to some button tap...
@IBAction func tappedButton(sender: AnyObject) {
let st = UIStoryboard(name: "Main", bundle: nil)
let vc = st.instantiateViewControllerWithIdentifier("AControllerID") as! A
// How do I initialize A with i ?
self.presentViewController(vc, animated: true, completion: nil)
}
}
我似乎无法做到这一点并通过使用 let 而不是 var 来保持 i 不可变。
【问题讨论】:
-
你需要在调用
super.init(coder: aDecoder)之前初始化i。这样可以修复编译器错误。 -
我只是编辑我的帖子,我认为这是你需要的,看到它的结尾
-
你有什么解决方案我面临同样的问题但找不到答案
标签: ios swift uiviewcontroller