我是swift的新手,正在尝试用它编写应用程序。
我正在过渡到UIViewController
。我在界面构建器中设计了UI,我打算使用segue来管理过渡。但是,视图控制器依赖于从前一个视图控制器传递到视图控制器的数据。
如果我的视图控制器上有属性,那么我需要重新定义我的init方法。但我通常不会调用init
方法;它会在prepareForSegue
之前给我打电话。所以我看到了一些可能的解决方案:
让我的变量可选(所以我可以在prepareForSegue
中传递它们
并更新视图然后)。
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let viewController: EventViewController = segue.destinationViewController as! EventViewController
viewController.event = self.event
}
手动init
我的视图控制器并以编程方式呈现它。
???
有第三种选择吗?如果没有,前面提到的2哪个更好的做法?
答案 0 :(得分:1)
您提到了两种可能的选项:
第一个是最简单的传递prepareForSegue
中的数据。你不必关心解雇控制器或跟踪内部视图控制器,因为故事板会处理它。
第二种方法是在故事板中为您需要以编程方式呈现的控制器设置Storyboard ID
,这需要处理更多事情,例如关闭控制器或跟踪内部呈现的控制器。
let nextViewControllerName = storyboard?.instantiateViewControllerWithIdentifier("Storyboard ID") as! nextViewControllerName
nextViewControllerName.event = self.event
self.presentViewController(nextViewControllerName, animated: true, completion: nil).
最后他们也有同样的目的。
注意 :您应该在呈现控制器之前传递数据。