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

时间:2008-12-15 17:33:36

标签: iphone tabbar

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

我想要的(并且似乎无法找到一个示例)是向应用添加导航控制器,以便每个笔尖(即每个标签)可以深入查看更多详细信息页面。

我是否应该在主窗口中添加导航控制器并为其创建IBOutlet,或者是否应将NC添加到笔尖。

8 个答案:

答案 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控制器的答案非常简单。

  1. 在故事板中拖动导航控制器。
  2. 将启动箭头分配给新的导航控制器,将控制器作为起点。
  3. 拖动Tabbar控制器并使用选项卡和所需的控制器进行设置。您可以稍后在需要时设置带有标签的标签栏控制器。
  4. 选择导航控制器并将其“root viewcontroller”与Tabbar Controller绑定。
  5. 这将使用导航和tabview控制器加载应用程序。