我有一个基于导航的应用程序,它显示了一个 TableView,您可以在其中选择一个单元格,它会将您带到该单元格的“详细信息视图”。我希望这个视图有一个 TabBar,我可以在其中选择 3 个子视图。我在网上找到了几个解决方案,但没有一个很有帮助。是否有专门针对此的教程,或者他们的源代码是否说明了如何完成?谢谢
3 回答
基本上你需要做的就是将一个选项卡视图控制器推送到导航控制器的视图控制器堆栈上。
从一个全新的“基于导航的应用程序”模板开始。我在 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:)。
希望这可以帮助您继续前进。
您应该知道,如果您这样做,Apple 可能会拒绝您的申请。
来自“结合标签栏和导航控制器”
组合标签栏和导航控制器是很常见的,如图 4 所示。为此,您只需将导航控制器添加到标签栏控制器(但是,您永远不应该将标签栏控制器添加到导航控制器)。
因此,它可能违反人机界面指南,因此您可能会被拒绝。
我正在尝试做同样的事情。应用程序“Tweetie”正在做类似的事情。他们有一个帐户的 TableView,然后您选择一个帐户并出现 TabBar。
无论如何,直接来自 Apple 的文档:
pushViewController:animated:将视图控制器推送到接收器的堆栈并更新显示。
- (void)pushViewController:(UIViewController *)viewController 动画:(BOOL)动画
参数 viewController 被压入堆栈的视图控制器。它不能是标签栏控制器的实例。如果视图控制器已经在堆栈中,则此方法不执行任何操作。
动画 将此值设置为 YES 以动画过渡。如果您在显示其视图之前设置导航控制器,则传递 NO。
所以也许我们只是卡住了使用 TabBar 而不是 TabBarController?
-J.P