导航控制器中的标签栏控制器确实有效,但参考文献说它不会

时间:2011-10-04 04:52:32

标签: iphone ios xcode uinavigationcontroller uitabbarcontroller

apple's UINavigation Controller Class Reference说pushViewController:animated:方法无法将标签栏控制器的实例推送到堆栈上,我也阅读了以下文章:Tab bar controller inside a navigation controller, or sharing a navigation root view

但是,似乎将UITabBarController的实例添加到导航控制器的堆栈上对我来说效果很好。我正在使用XCode 4.2(测试版,肯定)+ iOS 5并制作了一些示例代码,如下所示:

- (void)viewDidLoad
{
  [super viewDidLoad];
  self.secondCtrl = [[[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil] autorelease];
  self.secondCtrl.title = @"Second";
  self.thirdCtrl = [[[ThirdViewController alloc] initWithNibName:@"ThirdViewController" bundle:nil] autorelease];
  self.thirdCtrl.title = @"Third";

  self.tabCtrl = [[[UITabBarController alloc] init] autorelease];
  self.tabCtrl.title = @"Tab!";
  self.tabCtrl.viewControllers = [NSArray arrayWithObjects:self.secondCtrl, self.thirdCtrl, nil];
}

- (IBAction)goNext:(id)sender {
  [self.navigationController pushViewController:self.tabCtrl animated:YES];
}

上面的代码片段是窗口根视图控制器源代码的一部分。

我想知道苹果的引用是否已过时,或者我的代码工作奇怪?

1 个答案:

答案 0 :(得分:1)

UITabBarController继承自UIViewController,因此,正如您的代码所示,可以将其推送到导航堆栈,但Apple通常不会推荐它。来自Apple iOS Human Interface Guidelines

  

通常,使用标签栏在应用程序级别组织信息。标签栏非常适合在主应用视图中使用,因为它是一种平整信息层次结构并一次提供对多个对等信息类别或模式的访问的好方法。

当然,规则总是有例外,因此我建议您使用最佳判断并决定什么对用户最有利。