我有一个基于导航的应用程序,它显示了一个TableView,您可以在其中选择一个单元格,它会将您带到该单元格的“详细信息视图”。我希望这个视图有一个TabBar,我可以在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