使用segue时,在初始化程序之前将数据传递给视图控制器。 (SWIFT)

时间:2015-11-17 08:14:22

标签: ios swift uiviewcontroller

我是swift的新手,正在尝试用它编写应用程序。

我正在过渡到UIViewController。我在界面构建器中设计了UI,我打算使用segue来管理过渡。但是,视图控制器依赖于从前一个视图控制器传递到视图控制器的数据。

如果我的视图控制器上有属性,那么我需要重新定义我的init方法。但我通常不会调用init方法;它会在prepareForSegue之前给我打电话。所以我看到了一些可能的解决方案:

  1. 让我的变量可选(所以我可以在prepareForSegue中传递它们 并更新视图然后)。

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        let viewController: EventViewController = segue.destinationViewController as! EventViewController
        viewController.event = self.event
    }
    
  2. 手动init我的视图控制器并以编程方式呈现它。

  3. ???

  4. 有第三种选择吗?如果没有,前面提到的2哪个更好的做法?

1 个答案:

答案 0 :(得分:1)

您提到了两种可能的选项:

第一个是最简单的传递prepareForSegue中的数据。你不必关心解雇控制器或跟踪内部视图控制器,因为故事板会处理它。

第二种方法是在故事板中为您需要以编程方式呈现的控制器设置Storyboard ID,这需要处理更多事情,例如关闭控制器或跟踪内部呈现的控制器。

let nextViewControllerName = storyboard?.instantiateViewControllerWithIdentifier("Storyboard ID") as! nextViewControllerName
nextViewControllerName.event = self.event
self.presentViewController(nextViewControllerName, animated: true, completion: nil).

最后他们也有同样的目的。

注意 :您应该在呈现控制器之前传递数据。