【问题标题】:Best practice when combining Tabs with Navigation将选项卡与导航结合使用时的最佳实践
【发布时间】:2013-07-15 14:35:28
【问题描述】:

我使用选项卡式应用程序模板来开始我的新 iPhone 项目。
我将有 4 个标签。
我想在顶部导航栏。
所以我在 AppDelegate 中添加了这个:

UIViewController *viewController1 = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
    UIViewController *viewController2 = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];

    UINavigationController *navigationcontroller = [[UINavigationController alloc] initWithRootViewController:viewController1];

    self.tabBarController = [[UITabBarController alloc] init];
    self.tabBarController.viewControllers = [NSArray arrayWithObjects:navigationcontroller, viewController2, nil];

并且这仅在第一个 ViewController(第一个选项卡)的顶部添加了导航栏。
我想要的是为整个应用程序添加导航栏,而不仅仅是在一个视图中。
这将使我能够从一个视图跳转到另一个视图,然后跨选项卡返回。
那么,以编程方式为所有标签视图创建一个导航栏的最佳方法是什么?

更新
基本上我的主要问题是我应该为所有视图设置一个导航栏还是每个标签都应该有自己的导航栏
“iDevelopers”世界的最佳实践是什么。

【问题讨论】:

  • 您可能过多地融合了您的设计模式/工作流程。使用标签栏,每个标签本质上都是它自己的导航堆栈(假设每个标签都有自己的导航)。如果您希望导航位于“外部”,我认为您必须将标签栏控制器添加到导航控制器。就我个人而言,我自己并没有这样做,但我知道仅将导航控制器添加到其中一个选项卡只会为您提供该选项卡上的导航堆栈。

标签: iphone ios objective-c uitabbarcontroller uinavigationbar


【解决方案1】:

我宁愿让 self.window.rootViewController 成为一个导航控制器,然后,只需按下你的 tabBarController 或

NSMutableArray *viewControllers = [[NSMutableArray alloc] init];

// create someViewController
[viewControllers addObject:someView];
// create someViewController2
[viewControllers addObject:someView2];


UITabBarController *tabController = [[UITabBarController alloc] init];
[tabController setViewControllers:viewControllers];

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:tabController]
self.window.rootViewController = navController;

【讨论】:

  • 不,这在我切换标签时不起作用,它不显示返回按钮。
  • 它应该是在标签之间切换的任何后退按钮。已经有可以点击的选项卡,后退按钮应该只弹出选项卡层次结构中的视图控制器。如果您真的想要此功能,只需制作一个带有底部栏的导航控制器,该导航控制器带有 3 个按钮,可将视图控制器推送到同一导航控制器上
【解决方案2】:

如果你想在每个控制器上都有导航栏,你应该在UITabBarController 的每个标签上都有UINavigationController 查看this问题的答案。

【讨论】:

  • 是的,但我想为所有人提供一个导航栏。我不知道这是否是聪明的主意,这就是我问的原因。示例:用户单击选项卡 2,然后单击某个按钮,该按钮转到选项卡 4,然后从那里转到选项卡 3。现在他将返回导航栏,可以返回选项卡 4,然后返回选项卡 2。我找到了一些解决方法(在每个视图上添加标签栏,导航栏作为根视图),但我不知道这是否是正确的方法,或者我应该坚持每个标签使用 nav vontroller。
【解决方案3】:

你需要导航栏,你必须添加 UINavigationController,就像你为标签栏中的每个视图控制器所做的那样。所以 self.tabBarController.viewControllers 将拥有所有的导航控制器。

在没有用户干预的情况下切换选项卡并不是一个好主意。

【讨论】:

    猜你喜欢
    • 2013-08-20
    • 2010-11-28
    • 2010-09-06
    • 2018-06-22
    • 2020-01-09
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多