【问题标题】:ViewController creation process using storyboardViewController创建过程使用storyboard
【发布时间】:2015-10-30 00:34:43
【问题描述】:

对于以下步骤:

  1. 使用storyboard拖动两个视图控制器,在第一个VC上添加一个按钮
  2. ctrl将第一个VC上的按钮拖到第二个VC并选择present segue
  3. 使用导航控制器嵌入第一个 VC

我的问题是:

  1. 程序启动时会发生什么?特别是,第一个和第二个 VC 将如何以及在哪里创建?
  2. 如果不一样,和下面的代码有什么区别?

    let vc = storyboard.instantiateViewControllerWithIdentifier("someViewController") as! UIViewController

Swift 代码将是首选,但 Objective-C 也可以。提前致谢。

【问题讨论】:

  • 您展示的代码实例化了一个视图控制器,但没有以任何方式呈现它。 ctrl 拖动并创建一个 segue 将实例化视图控制器并在点击按钮时显示它。第一个视图控制器将由相当于main() 的Swift 运行时创建。触发 segue 时将创建第二个视图控制器
  • @Paulw11,我没有写下当前代码以专注于实例化部分。所以我的问题是,当我使用情节提要执行此操作时,是否调用了相同的instantiateViewControllerWithIdentifier 函数?
  • 可能调用了相同的方法。为什么这有关系?我不明白你在问什么
  • @Paulw11,只要明白代码方式和情节提要方式的区别就行了。

标签: ios swift uiviewcontroller storyboard


【解决方案1】:

你正在做什么:

let vc = storyboard.instantiateViewControllerWithIdentifier("someViewController") as! UIViewController

是你正在做故事板应该做的事情。你正在为转场做准备。当您使用故事板上的 segue 简单地连接两个视图时,您是在告诉编译器连接存在。当您运行代码时,第二个视图控制器在您单击按钮并执行 prepareForSegue 的瞬间被实例化。

总而言之,这就是手动覆盖故事板工作时调用的委托方法。

【讨论】:

  • 嗯,它与情节提要并不完全相同,因为如果您直接实例化第二个 viewController,您将不会在第一个 viewController 上调用 prepareForSegueperformSegueWithIdentifier 在这种情况下很有用。此外,shouldPerformSegueWithIdentifier 仅在从情节提要启动 segue 时调用。
猜你喜欢
  • 1970-01-01
  • 2012-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-18
  • 2015-12-01
  • 2012-04-13
  • 1970-01-01
相关资源
最近更新 更多