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 上调用prepareForSegue
。 performSegueWithIdentifier
在这种情况下很有用。此外,shouldPerformSegueWithIdentifier
仅在从情节提要启动 segue 时调用。以上是关于ViewController创建过程使用storyboard的主要内容,如果未能解决你的问题,请参考以下文章
使用 facebook open graph stories v4 将图片附加到操作中
使用带有地图附件的 Facebook Open Graph Story (GeoPoint)