【问题标题】:Sharing a UINavigationItem among different ViewControllers在不同的 ViewController 之间共享一个 UINavigationItem
【发布时间】:2013-12-19 04:01:38
【问题描述】:

我需要实现一个应用程序,该应用程序在多个屏幕的顶部有一个类似栏的导航栏。

它在左侧有一个图标、一些文本和一些右侧的按钮,因此这些可以很好地映射到导航项的左栏按钮项、标题视图和右栏按钮图标。

但是,在大多数屏幕上,栏的内容保持不变 - 即,后退按钮和标题更改只会在某些屏幕上偶尔出现,而在其他屏幕上会出现导航栏,但实际上并未用于导航目的.

最好实现这一点来配置 UINavigationItem,如果有多个屏幕和多个视图控制器,是否可以共享相同的 UINavigationItem?这样我就可以在 RVC 中配置 UINavigationItem 并在推送不同的视图控制器时将其保留在那里,在确实需要出现后退按钮时替换它?

如果这不是最好的方法,那么还有哪些替代方法?我尝试让我的 RVC 成为一个容器视图控制器并添加栏作为它的视图,它适用于直接子视图控制器,但不适用于孙视图控制器(它将占据整个屏幕,而不是分配给它们的部分容器视图)。

【问题讨论】:

  • 有什么问题,还是只是猜测?
  • 标题是“共享一个 UINavigationItem”,文本还问“有没有相同的 UINavigationItem 可以共享?”。因为当在 Storyboard 中创建视图/VC 时,IB 会自动为每个 VC 生成一个单独的 UINavigationItem - 因此多次自定义每个 VC 会让人头疼

标签: ios


【解决方案1】:

UIViewController 中的 navigationItem 是只读的,因此您不能在视图控制器之间共享单个共享 UINavigationItem。您可以有一个基本视图控制器类来管理设置您从中派生所有视图控制器的导航项。为了防止你的类变得过于耦合,你可以让它从 NSNotification 更新 navigationItem 的内容。然后,您可以在需要更新所有导航项时发布通知。

【讨论】:

  • 谢谢。每次 VC 被推送/弹出时,每次推送/弹出的导航项仍然不同,对吗?但是,即使外观与前一个相同,是否有可能在推送新的时出现可见的闪烁?
猜你喜欢
  • 1970-01-01
  • 2016-11-12
  • 2019-06-20
  • 2020-09-11
  • 2017-10-18
  • 1970-01-01
  • 2013-08-05
  • 2012-11-14
  • 2012-03-14
相关资源
最近更新 更多