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

Swift Changing View with performSegueWithIdentifier / programmatically

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

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

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

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

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

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

但是,当我接着运行代码的时候。 View 2 加载不出来,模拟器中只出现View 1。

任何帮助和解释将不胜感激。

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

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

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

将调用更改为 viewDidAppear 似乎解决了另一个 post 中提到的问题:whose view is not in the window hierarchy(注意语言是 objective-c 而不是 swift, 但可以翻译)。

看来您必须小心在视图生命周期中的什么时候要将其更改为另一个视图控制器 - 在 viewDidLoad 情节提要中的所有视图都不可用。

顺便说一句,如果没有条件,每次加载视图时都会触发 segue(并加载视图控制器)!