我有一个简单的iPhone应用程序,它有一个标签栏和3个标签.每个选项卡作为单独的笔尖加载到相应的控制器.每个笔尖都包含一个tableview,其中包含一些其他用于搜索/过滤的控件.
我想要的(并且似乎无法找到一个示例)是向应用程序添加导航控制器,以便每个笔尖(即每个标签)可以向下钻取到更多详细信息页面.
我应该在主窗口中添加导航控制器并为其创建一个导航控制器,IBOutlet
还是应该将NC添加到笔尖中.
一旦在XIB中有一个标签栏,最简单的方法是将UINavigationController对象从Library窗口(看起来像金色背景上的左侧导航栏按钮)拖动到标签栏的树视图中(仅文本视图,而不是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
例如didSelectRowAtIndexPath
打开DetailView 来访问Navigationcontroller
例如.
- (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文件,该文件添加带有后退按钮的导航栏.但是,如果以detailViewController
编程方式初始化,则可以向a添加一个动作(GoBack)以从其navigationcontroller中UIBarButtonItem
删除detailViewController
它.
-(void) GoBack { [self.navigationController popViewControllerAnimated:YES]; }
我意识到这已经很晚了,但是这个问题在今天谷歌搜索结果中排名第一,所以我想我会添加一个答案.O'Reilly有一个很棒的youtube视频教程,它将引导您完成一个tabbar +导航控制器应用程序.请在此处查看:http://www.youtube.com/watch?v = LBnPfAtswgw
思考它的方法是这样的:
您希望每个选项卡都有一个导航控制器.然后,每个导航控制器都需要一个根视图控制器和一个加载的Nib.
因此,在IB中,为每个选项卡添加导航控制器.然后,将每个导航控制器配置为具有适当的根视图控制器和Nib.
很多答案,但都没有检查过......
当然,现在Xcode界面构建器中的故事板非常简单:
创建感兴趣的导航控制器,然后选择菜单Editor
和项目Embed In >
,然后Tab Bar Controller
.
这甚至适用于Xcode为您开始使用新项目的主/详细拆分视图控制器模板时提供的导航控制器.在这两种情况下,我现在都有一个标签栏控制器作为我的主人; 对于iPhone来说,它一直在通过终端控制器涟漪,而在iPad上,它只将标签保留在主控器中(即横向右侧的分割,纵向的弹出式).
在这里从马的嘴里拿出一个方法:
http://developer.apple.com/iphone/library/featuredarticles/ViewControllerPGforiPhoneOS/CombiningViewControllers/CombiningViewControllers.html#//apple_ref/doc/uid/TP40007457-CH104-SW2