使用performSegueWithIdentifier /以编程方式快速更改视图

时间:2015-03-28 17:16:04

标签: ios swift uiviewcontroller storyboard segue

所以我试图在触发某些条件时以编程方式更改视图。

我创建了一个简单的项目,我想在View 1加载后从View 1更改为View 2。实际上,有一些逻辑操作会检查某个变量是否为true,然后调用performSegueWithIdentifier函数,但为了尽可能简单,我删除了该代码。

我执行的步骤首先是创建两个视图: Showing Two Views

然后我单击View 1,检查其属性,然后创建一个手动触发的segue到View 2 Connecting Manual Segue

我选择了“显示”选项,所以现在我的视图通过segue连接 Connected Manual Segue 然后在属性检查器下,我给出了故事板segue和标识符“GoToView2”。 Naming Segue 从那里我转到ViewController.swift文件,并在viewDidLoad函数中。我插入performSegueWithIdentifier代码:

self.performSegueWithIdentifier("GoToView2", sender: self)

Adding PerformSegueWithIdentifier Code

然而,当我运行代码时。视图2未加载,只有视图1出现在模拟器中。

非常感谢任何帮助和解释。

2 个答案:

答案 0 :(得分:3)

我在尝试在viewDidLoad函数中执行segue时遇到了同样的问题,并且出现的错误似乎是您尝试使用segue加载的视图不在窗口层次结构中

将呼叫更改为viewDidAppear似乎可以解决此问题中提到的问题:whose view is not in the window hierarchy(注意语言是客观的,但不是很快,但可以翻译)。

您希望在视图生命周期中的哪个位置要小心将其更改为另一个视图控制器 - 在viewDidLoad故事板中的所有视图都不可用。

BTW,没有条件,每次加载视图时都会触发segue(并加载视图控制器)!

答案 1 :(得分:0)

我正在开展一个完全符合您要求的项目。使用标识符执行segue是正确的做法。我的项目也在viewDidLoad中进行检查。

你所有的步骤看起来都很好,所以我认为这是一个微妙的问题。检查身份检查器以查看是否已将视图控制器与视图1连接