【问题标题】:No segues on UIViewController created programatically以编程方式创建的 UIViewController 上没有 segues
【发布时间】:2017-10-30 15:50:22
【问题描述】:

我在 VC A 上,我以编程方式转到 vc B,然后 VC B 没有转至 VC C (perform(segueWithIdentifier:)crashes)。 但是如果我使用 segue 去 VC B,然后我可以调用 segue 去 VC C

这是我崩溃的代码:

VCA:

// Method A (that does not crash)
// self.performSegue(withIdentifier: "gotoB", sender: self)

// Method B (that crashes)
let dst = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "vcB")
if let navigator = navigationController {
    navigator.pushViewController(vc, animated: true)
}

VCB:

self.performSegue(withIdentifier: "gotoC", sender: self) // crashes here

问题是我希望能够从任何地方访问 VC B,因此使用导航控制器进行编程推送。我想了解为什么会发生这种情况以及如何实现我想要的。谢谢。

【问题讨论】:

  • 你注册了segue标识符“gotoC”吗
  • 什么是崩溃日志?
  • @srinivasn 是的,我有转场gotoC,因为当我使用转场从A 转到B 时它可以工作。但是,当我使用 navigationControler 推送 B 时,它会崩溃。
  • @NiravD 它说没有找到segue(即使它存在于我的故事板上)。
  • @Dliix 检查segue的目的地gotoB和该控制器的storyboardIdentifier是vcB或其他东西。

标签: ios swift uinavigationcontroller segue


【解决方案1】:

如果您想从任何地方访问此 VC,您必须以编程方式从情节提要中实例化它,然后呈现/推送它。像这样的:

   let storyboard = UIStoryboard(name: "Main", bundle: Bundle(for: self))

   let viewController = storyboard.instantiateViewController(withIdentifier: "YourViewControllerId")

   navigationController.push(viewController, animated: true)

确保在 Storyboard 中为此视图控制器设置 StoryboardID

【讨论】:

  • 感谢您的快速回答,但是,这就是我目前正在做的事情。但是当我使用这个方法时,createViewController 没有 segues,因此perform(segueWithIdentifier:) 崩溃了。我不知道为什么。通过情节提要创建 VC 应该链接所有 segue 对吗?
  • 你根本不需要使用 segues
  • 是的,因为 vc B 重定向到来自另一个项目的 vc C 并且它使用 segues。即使我愿意,我也无法改变这种行为。
猜你喜欢
  • 2011-02-10
  • 1970-01-01
  • 2015-07-27
  • 2011-06-08
  • 1970-01-01
  • 2015-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多