使用TabBar的基于导航的应用程序

时间:2009-03-01 03:32:10

标签: iphone navigation tabbar

我有一个基于导航的应用程序,它显示了一个TableView,您可以在其中选择一个单元格,它会将您带到该单元格的“详细信息视图”。我希望这个视图有一个TabBar,我可以在3个子视图之间进行选择。我在网上找到了几个解决方案,但没有一个非常有帮助。是否有专门的教程或是他们的源代码,说明如何做到这一点?感谢

3 个答案:

答案 0 :(得分:6)

基本上你需要做的是将一个Tab View Controller推到导航控制器的viewcontroller堆栈上。

从全新的“基于导航的应用程序”模板开始。我在RootViewController.m中添加了以下方法:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
//Navigation logic may go here. Create and push another view controller.
UIViewController *viewOneViewController =   [[UIViewController alloc] init];
viewOneViewController.title = @"One";
viewOneViewController.view.backgroundColor = [UIColor redColor];

UIViewController *viewTwoViewController =   [[UIViewController alloc] init];
viewTwoViewController.title = @"Two";
viewTwoViewController.view.backgroundColor = [UIColor orangeColor];

UIViewController *viewThreeViewController = [[UIViewController alloc] init];
viewThreeViewController.title = @"Three";
viewThreeViewController.view.backgroundColor = [UIColor greenColor];

UITabBarController *anotherViewController = [[UITabBarController alloc] init];
anotherViewController.viewControllers = [NSArray arrayWithObjects:viewOneViewController, viewTwoViewController, viewThreeViewController, nil];
[self.navigationController pushViewController:anotherViewController animated:YES];
[anotherViewController release];

}

将此更改为25以测试:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 25;
}

现在,当我构建并运行时,我将以基本方式看到您正在寻找的内容。完成此工作后,您要做的是将UIViewControllers更改为您创建的自定义子类,以保存每个视图的代码。 (如果您还使用Interface Builder,请将init更改为initWithNibNamed:)。

希望这可以帮助你顺利开始。

答案 1 :(得分:2)

您应该知道,如果您这样做,Apple可能会拒绝您的申请。

来自“组合标签栏和导航控制器”

组合标签栏和导航控制器非常常见,如图4所示。为此,您只需将导航控制器添加到标签栏控制器(但是,您永远不应该将标签栏控制器添加到导航控制器)。

因此,它可能会违反人机界面指南,因此您可能会被拒绝。

答案 2 :(得分:1)

我正在努力做同样的事情。应用程序“Tweetie”正在做类似的事情。他们有一个帐户的TableView,然后你选择一个帐户和TabBar出现。

无论如何,直接来自Apple的文档:

  

pushViewController:动画:   将视图控制器推到接收器的堆栈上并更新显示。

     
      
  • (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
  •   
     

参数   的viewController   推入堆栈的视图控制器。 它不能是标签栏控制器的实例。如果视图控制器已经在堆栈中,则此方法不执行任何操作。

     

动画   将此值设置为YES可为过渡设置动画。如果在显示视图之前设置导航控制器,则传递NO。

所以也许我们只是使用TabBar而不是TabBarController?

-jP