segue 样式“替换”后缺少导航栏按钮项

Posted

技术标签:

【中文标题】segue 样式“替换”后缺少导航栏按钮项【英文标题】:Navigation bar button item missing after segue style "Replace" 【发布时间】:2012-12-30 22:26:10 【问题描述】:

我正在开发的 iPad 应用使用了 Storyboard 和 segue。当用户单击主视图中的不同单元格时,我试图显示不同的视图控制器。 在参考了不同的教程后,采取的步骤是 -

StoryboardMaster View Controller 中,为表格视图创建了静态单元格并添加了 3 个不同的行(即单元格 1、单元格 2、单元格 3) 添加了View Controller,选中它并附加了Navigation Controller (Editor -> Embed In -> Navigation Controller) 在Master View 的单元格1 中,我按住Ctrl 键单击Navigation Controller。 选择Segue Style“替换”和Destination“详细拆分” 在 tableView:didSelectRowAtIndexPath 中,添加 [self performSegueWithIdentifier:@"NewViewController" sender:self] 来进行转换。

我看到的结果是详细视图被替换了。

但是导航栏没有栏按钮项Master

所以我无法单击Master 按钮,该按钮将显示包含单元格的表格,我可以从中导航到不同的视图。

我已经阅读了许多博客并看到了有关替换 segue 以解决类似问题的评论。然而,似乎没有人在使用故事板和转场时遇到过这个特定问题。

根据我的理解,使用 segues 应该可以帮助我实现我想要的。从那些尝试过这种方法的人那里,任何指向正确方向的指针都会有所帮助。

【问题讨论】:

What have you tried? @Jules 这是我关于 SO 的第一个问题。我希望将来我问的问题会更清楚:) 下面的链接很好地描述了这个问题,我能够完全理解为什么在使用故事板时导航栏项丢失了。查看 oneMhz 的答案 raywenderlich.com/forums/viewtopic.php?f=2&t=1546> 那是您展示的一个非常有趣的链接。我会尽快使用的。谢谢。 这并不重要,@JulesMazur,但是 JSFiddle 究竟如何帮助任何人演示他们的 ios 代码? 【参考方案1】:

尝试将Segue StyleReplace 更改为Push。它应该可以解决您的问题。

当您将 UIViewController 推送到 UINavigationController 时,它将被添加到堆栈中,您将能够返回:

点击“详细信息”之前的导航控制器堆栈:

Master

您的导航控制器在点击细节并导航更多...:

Master -> Detail (Navigation button is displayed) -> Some other details (Navigation button is displayed) -> And maybe some more (Navigation button is displayed)

当您像以前一样使用Replace 调用新的segue 时,Master 将被替换为Detail,并且您将无法返回,因为 Master 已被替换并且它不再在堆栈中。

点击“详细信息”之前的导航控制器堆栈:

Master

像您一样使用替换点击详细信息后的导航控制器:

Detail (no navigation button because master was replaced and we don't have nothing more on the stack)

【讨论】:

以上是关于segue 样式“替换”后缺少导航栏按钮项的主要内容,如果未能解决你的问题,请参考以下文章

从搜索控制器导航后缺少导航栏

IOS:推送segue后导航栏消失

模态segue推动顶部的附加导航栏滑动

在全屏模式演示样式中使用 segue 时如何仍然显示导航栏?

我怎样才能让导航栏按钮继续?

从自定义导航栏展开 segue 后,如何切换回默认导航栏外观?