标签栏应用程序与导航控制器

我有一个简单的iPhone应用程序,有一个标签栏和3个选项卡。 每个选项卡作为单独的笔尖加载相应的控制器。 每个笔尖都包含一个用于search/过滤等其他控件的表格视图。

我想(而不能find一个例子)是添加一个导航控制器的应用程序,所以每个笔尖(即每个标签)可以深入到进一步的细节页面。

我应该添加一个导航控制器到主窗口,并为它创build一个IBOutlet ,或者如果NC被添加到笔尖。

在XIB中有一个标签栏后,最简单的方法就是将一个UINavigationController对象从库窗口(看起来像金色背景上的左侧导航栏button)拖到标签栏的树视图中仅文本视图,而不是GUI)。 将导航控制器放置在标签栏控制器内,然后拖动导航控制器内的现有视图控制器。

当你去查看该标签时,你应该看到它的顶部的导航栏…如果你从另一个xib加载导航控制器,你将修改标签栏xib中的导航栏。

这是如何以编程方式添加NavigationController(例如在你的AppDelegate中)

  UIViewController *viewController1, *viewController2; viewController1 = [[[UIViewController alloc] initWithNibName:@"FirstViewController_iPhone" bundle:nil] autorelease]; UINavigationController *navigationcontroller = [[[UINavigationController alloc] initWithRootViewController:viewController1] autorelease]; viewController2 = [[[UIViewController alloc] initWithNibName:@"SecondViewController_iPhone" bundle:nil] autorelease]; self.tabBarController = [[[UITabBarController alloc] init] autorelease]; self.tabBarController.viewControllers = [NSArray arrayWithObjects:navigationcontroller, viewController2, nil]; 

如果您在Viewcontroller1中有一个tableview,则可以使用self.navigationController访问Navigationcontroller,例如在didSelectRowAtIndexPath中打开一个DetailView

例如。

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil]; [self.navigationController pushViewController:detailViewController animated:YES]; [detailViewController release]; } 

在这个例子中,detailViewController使用一个NIB文件进行处理,该文件添加了一个带有后退button的导航栏。 但是,如果以编程方式初始化detailViewController ,则可以将操作(GoBack)添加到UIBarButtonItem以从其navigationController中删除detailViewController

 -(void) GoBack { [self.navigationController popViewControllerAnimated:YES]; } 

我意识到这是晚,但这个问题是今天的谷歌结果#1,所以我想我会添加一个答案。 有一个很好的YouTubevideo教程由O'Reilly,引导你通过一个Tabbar +导航控制器的应用程序。 看看这里: http : //www.youtube.com/watch?v=LBnPfAtswgw

思考的方式是这样的:

你希望每个标签都有一个导航控制器。 然后,每个导航控制器需要有一个根视图控制器和一个加载的Nib。

所以,在IB中,为每个选项卡添加导航控制器。 然后,将每个导航控制器configuration为具有适当的根视图控制器和笔尖。

很多答案,但没有检查…

当然,这在Xcode界面构build器中的故事板上已经超级容易了:

创build感兴趣的导航控制器,然后select菜单Editor和项目Embed In >然后Tab Bar Controller

这甚至可以与Xcode为您提供的导航控制器一起使用,当您开始使用新的项目的主/细分割视图控制器模板时。 在这两种情况下,我现在有一个标签栏控制器作为我的主人; 对于iPhone来说,它通过最终控制器一路涟漪,而在iPad上,它只能保持主控制器(即风景右侧的分割和纵向的popup)的制表符。

打开UITabBarController的XIB文件(从MainWindow.xib)

转到“标签栏控制器属性”。 你会看到一个“视图控制器”部分,其中每个选项卡的视图控制器将被提及。 只要将控制器的types更改为NavigationController,无论您想要哪个选项卡。

select已更改的控制器的视图,并检查其属性中的loadFromNib选项,然后select正确的笔尖。 (如更改控制器的种类后,此连接将会丢失)

问题太旧,但是SDK升级了,一些读者可能需要新的答案。 所以,现在对于故事板用户来说,使用Tabbar和导航控制器的答案非常简单。

  1. 拖动导航控制器内的故事板。
  2. 将启动箭头分配给以控制器为起点的新导航控制器。
  3. 拖动Tabbar控制器,并设置选项卡和所需的控制器。 你可以在后面也设置tabbar控制器,当你想做的时候。
  4. select导航控制器,并将其“根视图控制器”与Tabbar控制器绑定。

这将加载导航和tabview控制器的应用程序。