【问题标题】:Back button disappearing from screen后退按钮从屏幕上消失
【发布时间】:2015-06-11 23:53:57
【问题描述】:

我在网上查了答案,但似乎与导航控制器标题无关。

这是我的视图控制器可视化:

当我在初始表格视图(“选择任务”)上触摸一个单元格时,我会通过模态 segue 被定向到导航控制器。

此导航控制器中的第一个视图是“房间控制器”。

在这里,我按下另一个单元格并通过模态 segue 被定向到“房间详细信息”视图。

在此处按“返回”后,“房间控制器”中不再有“返回”按钮。它就这样消失了。

为什么会这样,有人知道吗?

【问题讨论】:

  • 导航栏和视图控制器的标题是否保持不变,只有后退按钮消失?
  • 从屏幕截图中我们可以看到,您可能正在实例化一个新的 RoomController(有一个从细节指向它的 segue),而不是关闭模式。这为您提供了一个没有导航控制器作为容器的控制器,因此失去了导航栏(和按钮),但这只是猜测,如果您可以发布一些代码,那肯定会有所帮助。还有一件事......为什么不使用推送来免费获得所有这些?
  • 可能是当您关闭模态视图控制器时,您正在使用它的后退按钮实例被释放。最好使用 push segue 而不是 modal。当您专门从情节提要中加载某些视图时,将使用模态,该视图与流程或独立的 XIB 不同

标签: ios swift


【解决方案1】:

实际情况:

不再有后退按钮,因为以 Room Details 作为源,Room Controller 作为目标的 segue 导致 RoomController 的另一个实例被实例化并呈现在屏幕上。由于 segue 目的地是房间控制器而不是导航控制器,因此没有导航栏,因此没有返回按钮。

解决方案:

我建议您使用 unwind segues 来返回而不是常规 segue,因为它们在执行时会创建目标控制器的新实例。

或者,您可以通过编程方式从房间控制器中关闭房间详细信息控制器(即使用委托以获得更大的灵活性)。

【讨论】:

  • 这可能是正确的答案。一个小提示...无需使用委托来解除,您只需对自己调用解除,如果需要,它会自动将消息转发给其演示者
  • 呈现视图控制器负责关闭它呈现的视图控制器。因为当您在房间详细信息控制器中调用dismissViewController:animated:completion 时,消息在导航堆栈中向下转发,消息到达呈现视图控制器并且结果是相同的。此外,如果用户在 Room Details Controller 中更改了某些内容并且这些更改需要反映在 Room Controller 中,那么委派可能会在未来有所帮助。
  • 感谢详细解答,很有帮助
猜你喜欢
  • 2021-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-06
相关资源
最近更新 更多