如何将 TabBar 添加到基于 NavigationController 的 iPhone 应用程序

Posted

技术标签:

【中文标题】如何将 TabBar 添加到基于 NavigationController 的 iPhone 应用程序【英文标题】:How to add a TabBar to NavigationController based iPhone app 【发布时间】:2009-01-27 03:47:49 【问题描述】:

我有一个简单的基于 NavigationController 的应用程序。主窗口显示一个 TableView 并选择一个项目加载一个子视图。我将 Interface Builder 用于 UI 视图。

现在我想在应用程序中添加一个 TabBar。我把它放在哪里?我需要一个 TabBarController 吗?它应该放在 MainWindow.xib 还是 RootViewController.xib 中?

如何将它与我的 NavigationController 绑定在一起?

【问题讨论】:

这将帮助我看到一个实际完整的工作 xcode 项目。有人有链接吗? 【参考方案1】:

确定这个问题的答案在 iPhone SDK 文档View Controller Programming Guide for iPhone中给出。

View Controller Programming Guide: Combining View Controllers

此链接直接进入该部分,其中讨论了创建基于导航和标签栏的界面的正确方法。

【讨论】:

【参考方案2】:

我在我的几个应用程序中执行此操作。将标签栏添加到基于 navigationController 的应用程序的技巧是不使用 TabBarController。在视图中添加一个 Tab Bar,使该视图的视图控制器成为 TabBarDelegate,并在视图控制器的代码中响应用户在标签栏上的选择。

我使用 Tab Bars 将其他视图添加到 Tab Bar 的视图中作为子视图、重新加载具有不同数据集的表格视图、重新加载 UIPickerView 等。

【讨论】:

如果您有超过 5 个标签并希望允许用户通过更多...按钮“编辑”主要标签怎么办?这是您使用标签控制器免费获得的东西 我不知道答案。我从未在 tabBar 中使用超过 4 个选项卡,也从未需要允许用户编辑该栏。我只知道您不能真正将 TabBarController 添加到基于 NavigationBar 的应用中【参考方案3】:

查看 UICatalog 示例代码。它有很多很棒的东西,包括从一种视图到另一种视图的过渡。

在您的情况下,您需要使用 UITableView 委托方法

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

在该方法中,您将创建并显示您的标签视图控制器。这可以是一个带有关联 Nib 的自定义控制器,或者您可以根据您的情况在代码中创建整个东西。

【讨论】:

【参考方案4】:

尽可能在选项卡式应用程序中嵌入导航栏是一个更好的主意。以另一种方式做会产生一些复杂性,用 IB 做起来很困难,并且会带来很多麻烦。

【讨论】:

你是说我应该基于 TabBarController 创建一个新项目,然后将我的导航控制器代码集成到其中吗?我宁愿保留我现有的项目,但如果它会造成很多麻烦,我想我可以开始一个新项目。【参考方案5】:

简单的答案是让它成为一个加载导航控制器的标签栏应用程序。

标签栏将是您的***别组件,然后您可以为每个标签加载导航控制器。从那里它应该是相当标准的东西。不久前,我不得不以艰难的方式学习这一点。

您可以从 XCode 中的基本标签栏应用程序模板开始,它应该设置一个带有 2 个简单视图的基本标签栏。

【讨论】:

【参考方案6】:

您可以使用 Interface Builder 编辑 MainWindow.xib,并将标签栏控制器添加到您的导航控制器。您还可以使用 IB 的 Inspector 窗口将 UITabBarController 的视图控制器更改为 View/Navigation/Table View/Image Picker Controllers。它会起作用的。

但是,我真的不建议将 Tab Bar Controller 放入 Navigation Controller 中。如果你走得更远(让它更复杂),这些控制器之间的关系会变得混乱。

假设您的标签栏控制器中有表格视图控制器,并且想要调出详细视图。按照设计,您可能希望告诉导航控制器将视图推送到堆栈中,但这样做会使详细视图与您的选项卡栏控制器(都在导航控制器下)和表视图控制器保持相同的级别作为详细视图的父级。这很奇怪,至少对我来说......

【讨论】:

能否复制或更新不再可用的内容?

以上是关于如何将 TabBar 添加到基于 NavigationController 的 iPhone 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何将自定义彩色图像添加到 TabBarController 中的 tabBar?

将顶部边框添加到选定的 TabBar

每次当前选项卡在 TabBar 颤动中更改时,如何将新页面添加到导航器堆栈?

微信小程序tabBar不显示的问题

将 UITabBarItems 添加到 UITabBar

IOS:将viewcontroller添加到ios中的自定义TabBar