11

我有一个在 UINavigationController 上运行的应用程序。现在我想在每个屏幕的底部添加一个 UIToolbar 元素。底部的工具栏应该可以针对当前显示的 ViewController 进行自定义。我的第一个想法是简单地将工具栏添加到 navigationController 视图并标记它,在 viewController 中我认为我可以检索 UIToolbar 元素。我有以下代码:

在我的 AppDelegate 中:

// Get instance of Toolbar  (navController is an instance of UINavigationController and TOOLBAR_TAG a constant)
UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 440, 320, 40)];
toolbar.tag = TOOLBAR_TAG;
[navController.view addSubview:toolbar];

在我的 viewController 我试过这个:

UIToolbar *toolbar = [self.navigationController.view viewWithTag:TOOLBAR_TAG];
toolbar.barStyle = UIBarStyleBlack;

然而,这给了我一个错误,说我的工具栏是“UILayoutContainerView”对象,而不是 UIToolbar 对象。因此,这个想法似乎是一个死胡同。

其他人是如何解决这个问题的?

4

3 回答 3

42

UINavigationController 已经有一个工具栏。只需使用

[self.navigationController setToolbarHidden:NO];

在最顶层的视图控制器和

[self setToolbarItems:items];

在所有视图控制器中,其中 items 是NSArray该视图控制器的工具栏项目。

编辑:至于为什么您的解决方案不起作用:您TOOLBAR_TAG可能不是唯一的,这就是您获得另一个子视图的原因。但正如我所说,无论如何你都应该使用附带的工具栏。

于 2010-02-22T16:49:28.540 回答
1

要轻松显示 UINavigationController 底部工具栏,您可以单击选中“导航控制器”对象的检查器可访问的“显示工具栏”复选框。我希望这可能会有所帮助:)

于 2011-07-24T17:57:27.793 回答
0

从设计的角度来看,我不建议这样做,除非您知道工具栏将出现在堆栈中的每个视图中。当您开始隐藏/显示堆栈中不同视图的工具栏时,您将看到该动画(工具栏滑出/滑入视图)并没有像您期望的那样动画。

如果您需要特定视图的工具栏,请将它们放在这些视图中,因为工具栏是视图的上下文,而不是整个导航堆栈。

于 2015-05-13T14:19:53.943 回答