不使用UINavigationController工具栏的替代方案

3
我有一个带有多个视图的应用程序,使用了导航控制器。在某些视图上,我需要一个工具栏,其中包含与该视图相关的按钮。虽然我已成功地将自定义按钮添加到某些视图的工具栏中,但在维护这些工具栏的状态方面,我遇到了很大的问题。例如,当导航到一个具有自定义工具栏的视图时,应用程序中的所有其他视图似乎都会继承该工具栏的状态。例如,视图'A'需要一个带有按钮'X'的工具栏。这按计划工作。但是,当导航到视图'B'时,视图A的工具栏被加载到视图B中。
我尝试在viewDidDisappear中取消配置工具栏,但效果有限。使用这种方法时,删除自定义项存在延迟。例如,当导航到另一个视图时,按钮直到下一个视图加载后才消失。
实际上,我只需要一个停留在视图底部并且在用户滚动视图时不会滚动消失的工具栏。似乎唯一实现这一点的方法是将其锁定到导航控制器的工具栏中。然而,这种方法会创建许多其他问题,包括上述问题。
再次强调,我要寻找的行为是拥有一个始终位于视图底部且与视图/表视图的滚动无关的工具栏。是否有一种方法可以在不使用导航控制器的情况下实现这一点?谢谢!

1
你能稍微澄清一下你的应用程序结构吗?你是否有一个导航控制器作为根视图控制器,并且通过推入和弹出来在控制器之间进行转换(如你在某些地方所说的那样,没有滚动)?你把工具栏添加到哪里了?每个控制器上?还是在导航控制器上? - rdelmar
是的,我有一个导航控制器作为根视图控制器。如果用户滚动视图,我希望自定义工具栏保持可见。我将工具栏添加到每个视图控制器的导航栏中。 - Pheepster
  1. 我认为您需要的是TabBarController。
  2. 您可以使用带有TableView的ViewController代替TableViewController来限制可滚动区域。
- John
1
保持在哪个视图中?您希望A的工具栏与A保持一致,B的工具栏与B保持一致吗?再次问及滚动。您是实际滚动(使用UIScrollView),还是在谈论使用plush和pop时获得的过渡效果? - rdelmar
我正在使用一个tableviewcontroller。是的,我希望A的工具栏保留在A中,B的工具栏保留在B中... - Pheepster
1
我不明白你遇到了什么问题。如果你为A添加了一个工具栏,同时为B添加了另一个工具栏,那么当你在它们之间来回切换时,工具栏会保留它们各自的控制器。我已经测试过了,我没有看到你所提到的问题。 - rdelmar
2个回答

0
这是我的解决方案:在一个视图控制器中实现这些方法。
 - (void)viewDidLoad
 {
     self.navigationController.toolbarHidden = NO;
 }

 - (void)viewDidAppear:(BOOL)animated
 {
     self.navigationController.toolbarHidden = NO;
     [super viewDidAppear:animated];
 }

 - (void)viewWillDisappear:(BOOL)animated
 {
     self.navigationController.toolbarHidden = YES;
     [super viewWillDisappear:animated];
 }

 - (void)viewDidDisappear:(BOOL)animated
 {
     self.navigationController.toolbarHidden = YES;
     [super viewDidDisappear:animated];
 } 

0
您正在寻找这个属性:hidesBottomBarOnPush(在SB上可用)?您可以在每个导航控制器的视图中将此属性设置为YES,但不包括A。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接