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

时间:2009-01-27 03:47:49

标签: iphone cocoa-touch

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

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

如何将其与NavigationController绑在一起?

6 个答案:

答案 0 :(得分:8)

此问题的权威性答案在适用于iPhone的View Controller编程指南的iPhone SDK文档中提供。

View Controller Programming Guide: Combining View Controllers

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

答案 1 :(得分:4)

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

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

答案 2 :(得分:2)

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

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

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

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

答案 3 :(得分:2)

简单的答案是使其成为加载导航控制器的标签栏应用程序。

标签栏将是您的最高级别组件,然后您可以为每个选项卡加载导航控制器。从那里它应该是相当标准的东西。我不得不在不久前学到这一点。

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

答案 4 :(得分:2)

最好尽可能在选项卡式应用程序中嵌入导航栏。另一方面这样做会产生一些复杂性,使用IB时会很困难并导致很多麻烦。

答案 5 :(得分:2)

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

但是,我并不建议将标签栏控制器放入导航控制器。如果你更进一步(使它更复杂),这些控制器之间的关系将会混淆。

假设您的选项卡栏控制器中有表视图控制器,并且想要显示详细信息视图。根据设计,您可能希望告诉导航控制器将视图推入堆栈,但这样做会使详细视图与Tab Bar Controller(在导航控制器下)成为同一级别,而Table View Controller将关系保持为详细视图的父级。这很奇怪,至少对我而言......