【问题标题】:View controller loses unwind segue if storyboard initialviewcontroller changed如果情节提要初始视图控制器更改,视图控制器将失去展开序列
【发布时间】:2018-07-16 11:00:22
【问题描述】:

我不知道这是否是一种常见行为,或者我是否遗漏了某些东西,但如果定义 segue 的视图控制器不在层次结构中,我无法在我的 viewController 中执行展开 segue。说清楚:

1) 在AppDelegate 中,如果用户登录,我根据简单条件更改了初始视图控制器。

if (user.isLogged()) {
  skipLogin()
}

2) 如果是,则跳过LoginViewController(定义展开转场的那个)并转到MainViewController。如果没有任何变化,因为 LoginViewController 是故事板的默认 initialViewController。

window = UIWindow(frame: UIScreen.main.bounds)
let vc = storyboard.instantiateViewController(withIdentifier: "main")
window?.rootViewController = vc
window?.makeKeyAndVisible()

3) 当我在主视图控制器中触发注销操作时,会调用performSegue 方法(找到标识符本身)但没有任何反应。

【问题讨论】:

  • 我无法重现您的错误

标签: ios storyboard segue ios11 xcode9


【解决方案1】:

这是常见的行为。

展开转场不同于普通转场。 Unwind Segue 总是执行从当前视图控制器或源视图控制器到现有视图控制器的 segue,该视图控制器已经存在于导航堆栈中。它没有明确定义任何目标视图控制器。展开 segue 在运行时通过遍历导航层次结构来搜索它的目标视图控制器。

因此,在您的情况下,如果 YES,定义 segue 的 LoginViewController 不会出现在导航层次结构中。因此,segue 不起作用。

【讨论】:

  • 谢谢!你知道是否有办法检查是否会执行 segue,或者最好的解决方案是设置 rootviewcontroller 而不是执行 segue?!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-23
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 2013-06-21
  • 2014-08-12
  • 2013-10-21
相关资源
最近更新 更多