2011-10-27 36 views
1

我用新的Xcode 4.2创建了一个新的“标签栏项目”。 使用UITabBar的“新”方式不同:Xcode不会创建xib文件(使用UITabBarController),但它通过代码完成所有工作。好的,让我们来做吧。使用UITabBarController旋转接口

所以我在didFinishLaunchingWithOptions代码是这样的:

UIViewController *viewController1, *viewController2, *viewController3; 
UINavigationController *nav1, *nav2, *nav3; 

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { 

    viewController1 = [[gemboy_iphone alloc] initWithNibName:@"vc1" bundle:nil]; 
    viewController2 = [[concerti_iphone alloc] initWithNibName:@"vc2" bundle:nil]; 
    viewController3 = [[discografia_iphone alloc] initWithNibName:@"vc3" bundle:nil]; 

    nav1 = [[UINavigationController alloc] initWithRootViewController:viewController1]; 
    nav2 = [[UINavigationController alloc] initWithRootViewController:viewController2]; 
    nav3 = [[UINavigationController alloc] initWithRootViewController:viewController3]; 

} 
else { 
    //same thing for the iPad version 
} 
self.tabBarController = [[UITabBarController alloc] init]; 
self.tabBarController.viewControllers = [NSArray arrayWithObjects:nav1, nav2, nav3, nil]; 
self.window.rootViewController = self.tabBarController; 
[self.window addSubview:self.splash.view]; 
[self.window makeKeyAndVisible]; 
return YES; 

和它的作品。

我的三个.m文件vc1.m,vc2.m和vc3.m(也是我的iPad UIViewControllers)有这个方法

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return YES; 
} 

的问题是,当我旋转iPhone,它只是旋转状态栏,而不是TabBarController!

你知道为什么吗? 谢谢

+0

你的三个视图控制器类称为gemboy_iphone,concerti_iphone和discografia_iphone,但它们驻留在文件vc1.m,vc2.m和vc3.m中是很常见的。你确定这是正确的吗? XCode不会因为它们的名称与nib名称相似而找不到这些文件。如果他们确实包含这些类,并且您已将文件的所有者类型设置为这些类的nib中的类型,则会发生这种情况。 – morningstar

回答

2

你绝对不必子类UITabBarController,也不应该。

如果所有视图控制器都实现了shouldAutorotateToInterfaceOrientation,并且对于相同的方向返回YES,则标签栏控制器将自动旋转。

如果您使用选项卡式应用程序模板在Xcode 4.2中创建新项目,您将看到它自动旋转。