【发布时间】:2014-02-22 04:48:36
【问题描述】:
我创建了一个带有多个UIViewControllers 的UITabBarController 作为其标签。我还想在这个UITabBarController 中显示一个常量UINavigationBar,它将在选项卡中持续存在。由于UITabBarController 的子视图控制器都不是UINavigationControllers,我希望这是可能的并且不会引起冲突。有没有办法做到这一点?
目前我正在将完全相同的UINavigationBar 和相应的逻辑复制粘贴到每个子视图控制器,所以我猜有更好的方法。
就这有用的原因而言:想象一个 UINavigationBar 包含两个 UIBarButtonItems 用于“注销”和“帐户”。按“注销”将注销您并推送一个模态视图控制器,以便您可以重新登录,而按“帐户”将显示一个包含您帐户信息的模态视图控制器。
我在 Stack Overflow 上发现了这个现有问题,但问题本身和它的 cmets 措辞都非常糟糕且没有提供信息:How to add a navigation bar to UITabBarController?
更新:
我有一种感觉,我可能无法很好地解释自己,所以我创建了一个图形来说明我正在尝试做的事情。在下图中,我有一个UITabBarController,它以四个UIViewControllers 作为孩子的模态呈现。我希望有一个恒定的UINavigationBar,以便用户可以按Done 来关闭模态呈现的视图控制器。由于每个子视图控制器都是一个视图,因此似乎没有必要将每个子视图控制器嵌入到自己的 UINavigationController 中以使 UINavigationBar 出现。目前,当UITabBarController 以模态方式呈现时,不会出现导航栏。
【问题讨论】:
-
您复制/粘贴的代码是什么?我已经使用故事板和代码进行了设置,不需要复制/粘贴。
-
目前我正在每个子视图控制器中创建一个 IBAction 并将其委托给 UITabBarController。这不像复制主要逻辑本身那样浪费/重复,但它似乎仍然应该是 DRY-er。
-
好的,我不得不重新阅读它。您需要一个用于所有选项卡的导航控制器。当您按下标签图标时会发生什么?它只是将新的视图控制器推送到导航控制器上还是替换顶部视图控制器?
-
我不想为所有标签使用一个
UINavigationController,只需要一个UINavigationBar。目前,如果我在 Interface Builder 中向UITabBarController添加一个UINavigationBar,它根本不会出现。但是,我想我可以让每个选项卡连接到相同的UINavigationController并覆盖-[UITabBarController tabBarController:shouldSelectViewController:]方法,以便它简单地更新UINavigationController的子视图而不是完全替换它。 -
这可以在 Interface Builder 中完成。我工作的第一个项目就是这样做的。如果是故事板,那就太简单了,如果是 NIB,那就有点棘手,但仍然可行。
标签: objective-c cocoa-touch uitabbarcontroller uinavigationbar