Iphone 基于导航的TabBar应用程序

Iphone 基于导航的TabBar应用程序,iphone,navigation,tabbar,Iphone,Navigation,Tabbar,我有一个基于导航的应用程序,它显示一个表视图,您可以在其中选择一个单元格,并将您带到该单元格的“详细视图”。我希望这个视图有一个选项卡,我可以在3个子视图之间进行选择。我在网上找到了一些解决方案,但没有一个是非常有用的。是否有专门针对这一点的教程,或者他们的源代码是否指明了如何做到这一点?谢谢基本上,您需要做的是将选项卡视图控制器推到导航控制器的viewcontroller堆栈上 从新的“基于导航的应用程序”模板开始。我在RootViewController.m中添加了以下方法: - (void

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

基本上,您需要做的是将选项卡视图控制器推到导航控制器的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;
}
现在,当我构建并运行时,我将以一种基本的方式了解您在寻找什么。完成此工作后,您要做的是将UIViewController更改为您创建的自定义子类,以保存每个视图的代码。(如果您还使用Interface Builder,请将init更改为initWithNibNamed:)


希望这对你有所帮助。

你应该知道,如果你这么做,苹果可能会拒绝你的应用程序

从“组合选项卡栏和导航控制器”

组合选项卡栏和导航控制器非常常见,如图4所示。要做到这一点,只需将导航控制器添加到选项卡栏控制器(但是,永远不要将选项卡栏控制器添加到导航控制器)。


因此,这可能违反人机界面准则,因此您可能会被拒绝。

我也在尝试做同样的事情。应用程序“Tweetie”也在做类似的事情。他们有一个帐户的表格视图,然后您选择一个帐户并显示选项卡栏

总之,直接从苹果的文档中可以看出:

pushViewController:已设置动画: 将视图控制器推送到接收器堆栈上并更新显示

  • (void)pushViewController:(UIViewController*)已设置动画的viewController:(BOOL)已设置动画
参数 视图控制器 推送到堆栈上的视图控制器它不能是选项卡栏控制器的实例。如果视图控制器已在堆栈上,则此方法不会执行任何操作

活跃的 将此值设置为“是”以设置过渡动画。如果在显示导航控制器的视图之前设置导航控制器,则传递否

所以也许我们只是在使用TabBar而不是TabBar控制器


-JP

您还应该创建UITabBarController的自定义子类,在该子类中分配其ViewController,这比将所有内容都放在didSelectRow方法中更干净。除此之外,你还忘了一些“释放”。但仍然+如果我们不想用xib制表,那么。。??