gpt4 book ai didi

ios - 来自应用程序委托(delegate)的自定义 segue

转载 作者:搜寻专家 更新时间:2023-11-01 06:48:07 26 4
gpt4 key购买 nike

我正在尝试从我的 AppDelegate 执行转场.我知道我实际上无法从 AppDelegate 执行 segue ,因为 segue 是从一个场景到另一个场景的过渡,所以我实例化了两个 ViewControllers关心我的AppDelegate

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let loadingViewController = storyboard.instantiateViewControllerWithIdentifier("loadingViewController") as UIViewController
let loginViewController = storyboard.instantiateViewControllerWithIdentifier("loginViewController") as UIViewController
let mainViewController = storyboard.instantiateViewControllerWithIdentifier("mainViewController") as UIViewController

然后,我尝试 loadingViewController.performSegueWithIdentifier("segueToLogin", sender: self)其中 segueToLogin是我 Storyboard中的自定义 segue 标识符

enter image description here

我得到的错误(不会使应用程序崩溃)是

Tacklebox[27258:1016738] Warning: Attempt to present <Tacklebox.LoginViewController: 0x7fd8a9646bd0> on <Tacklebox.LoadingViewController: 0x7fd8a943d940> whose view is not in the window hierarchy!

最终结果是我留在sourceViewController , loadingViewController .

最佳答案

问题是您已经在 App Delegate 中创建了这些 View Controller ,但由于您没有使用这些特定实例在 View 之间导航,因此这些 View Controller 实例实际上与堆栈中的 View Controller 不同;因此错误说 LoadingViewController 实例你试图继续“不在窗口层次结构中。”

您将必须获取事件 LoadingViewController 的实例。由于您从中执行 segue 的 View Controller 必然是(即应该是)可见的,并且因为(如您的 Storyboard 所示),rootViewController 是一个 UINavigationController,试试这个来访问导航层次结构中的当前 LoadingViewController:

let navigationController = self.window?.rootViewController as UINavigationController
let loadingViewController = navigationController.visibleViewController as LoadingViewController
loadingViewController.performSegueWithIdentifier("segueToLogin", sender: self)

关于ios - 来自应用程序委托(delegate)的自定义 segue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27581999/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com