self?.performSegue 没有显示导航栏

Posted

技术标签:

【中文标题】self?.performSegue 没有显示导航栏【英文标题】:self?.performSegue is not showing navigation bar 【发布时间】:2018-01-24 10:26:45 【问题描述】:
self?.performSegue(withIdentifier: "myview", sender: nil)

即使我在情节提要中使用 push,上面的代码也不会显示导航栏。 下面的代码向我显示了一个错误,即使存在正确名称的 segue

self?.navigationController?.performSegue(withIdentifier: "myview", sender: nil)

错误

由于未捕获的异常 'NSInvalidArgumentException' 导致应用程序终止,原因:'Receiver () has no segue with identifier 'myview''

【问题讨论】:

你想在哪个班级做这个,self 指的是什么?你确定你正确设置了 segue 标识符吗? 是的,这就是简单 self?.performSegue 工作但没有导航栏的原因。导航是抛出错误 谢谢,大家都说我做self的时候没有viewcontroller?.navigationController?.performSegue。 【参考方案1】:

您的导航栏可能已隐藏,请尝试在视图控制器中添加此代码,该代码会被 segue 调用

override func viewWillAppear(_ animated: Bool) 
    self.navigationController?.setNavigationBarHidden(false, animated: true)

注意:请检查使用“myView”推送segue的viewController是否嵌入在UINavigationController中。

【讨论】:

【参考方案2】:

self?.navigationController?.performSegue(withIdentifier: "myview", sender: nil) segue 附加到 UIViewController 子类实例而不是 UINavigationController 实例,因此您不能在后者上调用它。

如果您在执行 segue 后没有导航栏,则必须确保将视图控制器正确嵌入导航控制器中,或者如果您手动添加导航栏,请确保将其添加到其他viewWillAppear 方法中的视图控制器。

【讨论】:

【参考方案3】:

案例 1:确保 UINavigationBar 上的可见性。

情况 2:将 segue 连接到 UINavigationController 而不是 UIViewController。

【讨论】:

【参考方案4】:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Receiver (<UINavigationController: 0x1180a2e00>) has no segue with identifier 'myview''

正如错误中所写的那样,没有segue被命名为“myView”,这取决于你是否使用故事板,你应该看看here 如果没有故事板,请查看that

但此外,请花时间阅读错误消息。

【讨论】:

【参考方案5】:
self?.navigationController?.performSegue(withIdentifier: "myview", sender: nil)

此行不会执行与 myview 的 segue。您已将 segue 附加到视图控制器而不是导航控制器。这就是您在执行此操作时遇到错误的原因。

self?.performSegue(withIdentifier: "myview", sender: nil)

检查您是否已将视图控制器正确附加到 segue,并确保您的视图控制器具有附加的导航控制器。如果在没有附加导航控制器的情况下直接推送,则会导致问题。

希望它能解决问题。如果没有,请在找到解决方案时更新答案。谢谢!

【讨论】:

【参考方案6】:

我遇到了一个问题,即通过 segue 呈现一个新的 VC 时只显示一个没有导航栏的白屏。导航控制器似乎被忽略了。

原来该应用通过以下代码设置了一个奇怪的调色板:

UINavigationBar.appearance().tintColor = .white

为新的 VC 提供背景色表明导航栏和控制器确实存在,只是全部混合为白色。

【讨论】:

以上是关于self?.performSegue 没有显示导航栏的主要内容,如果未能解决你的问题,请参考以下文章

self.performSegue(withIdentifier: "teacherDetail", sender: self) 需要点击两次

显示没有父级的另一个导航子控制器

self.performSegue 找不到storyboard-segue-ID,即使它已被命名

Swift 3:PerformSegue WithIdentifier 不显示视图控制器,没有错误

为 segue 做准备没有按预期工作

导航栏返回按钮不起作用