我有一个简单的基于NavigationController的应用程序。主窗口显示TableView,选择项目加载子视图。我使用Interface Builder进行UI视图。
现在我想在应用程序中添加一个TabBar。我把它放在哪里?我需要一个TabBarController吗?它应该进入MainWindow.xib还是RootViewController.xib?
如何将其与NavigationController绑在一起?
答案 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将关系保持为详细视图的父级。这很奇怪,至少对我而言......