我有一个简单的iPhone应用程序,它有一个标签栏和3个标签。每个选项卡作为单独的笔尖加载相应的控制器。每个笔尖都包含一个tableview,其中包含一些其他用于搜索/过滤的控件等。
我想要的(并且似乎无法找到一个示例)是向应用添加导航控制器,以便每个笔尖(即每个标签)可以深入查看更多详细信息页面。
我是否应该在主窗口中添加导航控制器并为其创建IBOutlet
,或者是否应将NC添加到笔尖。
答案 0 :(得分:63)
在XIB中有一个标签栏后,最简单的方法是将UINavigationController对象从“库”窗口(看起来像金色背景上的左侧导航栏按钮)拖动到选项卡的“树视图”中bar(仅文本视图,而不是GUI)。将导航控制器放在标签栏控制器内,然后将现有视图控制器拖动到导航控制器内。
当你去查看该标签时,你会看到它顶部的导航栏...如果你从另一个xib加载导航控制器,你将修改标签栏xib中的导航栏。 / p>
答案 1 :(得分:27)
这是以编程方式添加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文件,该文件添加了带有后退按钮的导航栏。
但是,如果以编程方式初始化detailViewController
,则可以向UIBarButtonItem
添加操作(GoBack)以从其导航控制器中删除detailViewController
。
-(void) GoBack
{
[self.navigationController popViewControllerAnimated:YES];
}
答案 2 :(得分:13)
我意识到这已经很晚了,但是这个问题在今天谷歌搜索结果中排名第一,所以我想我会添加一个答案。 O'Reilly有一个很棒的youtube视频教程,它将引导您完成一个tabbar +导航控制器应用程序。请在此处查看:http://www.youtube.com/watch?v=LBnPfAtswgw
答案 3 :(得分:9)
考虑它的方法是:
您希望每个标签都有一个导航控制器。然后,每个导航控制器都需要有一个根视图控制器和一个加载的Nib。
因此,在IB中,为每个选项卡添加导航控制器。然后,将每个导航控制器配置为具有相应的根视图控制器和Nib。
答案 4 :(得分:9)
很多答案,但都没有检查......
当然,现在Xcode界面构建器中的故事板非常简单:
创建感兴趣的导航控制器,然后选择菜单 Editor
和项目 Embed In >
,然后选择 Tab Bar Controller
< / strong>。
这甚至适用于Xcode为您开始使用新项目的主/详细拆分视图控制器模板时提供的导航控制器。在这两种情况下,我现在都有一个标签栏控制器作为我的主人;对于iPhone来说,它一直在通过终端控制器涟漪,而在iPad上,它只保留了标签中的标签(即横向右侧的分割,纵向的弹出式按钮)。
答案 5 :(得分:6)
答案 6 :(得分:1)
打开UITabBarController的XIB文件(来自MainWindow.xib)
转到“标签栏控制器属性”。您将在那里看到“视图控制器”部分,其中将提到每个选项卡的视图控制器。只需将控制器的类型更改为NavigationController,无论您想要哪个选项卡。
选择已更改的控制器视图,并在其属性中检查loadFromNib选项,然后选择正确的笔尖。 (因为在更改控制器类型后,此连接将丢失)
答案 7 :(得分:0)
问题太旧了但SDK升级了,有些读者可能需要新答案。所以,现在对于故事板用户来说,使用Tabbar和Navigation控制器的答案非常简单。
这将使用导航和tabview控制器加载应用程序。