ViewController创建过程使用storyboard

Posted

技术标签:

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

对于以下步骤:

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

我的问题是:

    程序启动时会发生什么?特别是,第一个和第二个 VC 将如何以及在哪里创建?

    如果不一样,和下面的代码有什么区别?

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

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

【问题讨论】:

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

你正在做什么:

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

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

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

【讨论】:

嗯,它与情节提要并不完全相同,因为如果您直接实例化第二个 viewController,您将不会在第一个 viewController 上调用 prepareForSegueperformSegueWithIdentifier 在这种情况下很有用。此外,shouldPerformSegueWithIdentifier 仅在从情节提要启动 segue 时调用。

以上是关于ViewController创建过程使用storyboard的主要内容,如果未能解决你的问题,请参考以下文章

如何创建文件 .plist

使用 facebook open graph stories v4 将图片附加到操作中

使用带有地图附件的 Facebook Open Graph Story (GeoPoint)

使用“内容”属性时组件不重新渲染(react-insta-stories)

storybook创建vue组件库文档

需求收集实例三之 FM