【问题标题】:Swift Changing View with performSegueWithIdentifier / programmatically使用 performSegueWithIdentifier / 以编程方式快速更改视图
【发布时间】:2015-06-01 22:18:16
【问题描述】:

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

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

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

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

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

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

但是,当我随后运行代码时。 View 2 不加载,模拟器中只出现 View 1。

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

【问题讨论】:

  • 您是否将第一个视图控制器的自定义类属性设置为 ViewController?这是您的代码执行所必需的。您在身份检查器中设置它。
  • @MikeTaverne 自定义类属性设置为 ViewController,这是默认完成的(我也手动检查过)。

标签: ios swift uiviewcontroller storyboard segue


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 我刚刚检查了身份检查器 View 1 是否连接到 ViewController。仍然没有快乐。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    • 2015-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多