我有一个带有不同ViewControllers的TabbarController。 其中一些ViewControllers应该自动旋转,一个ViewController只能在PORTRAIT中显示。 我按照以下步骤填写Tabbar:
ChartThemeViewController *chartViewController = [[ChartThemeViewController alloc]
initWithTheme:chartThemeDict];
UINavigationController *theNavigationController = [[UINavigationController alloc]
initWithRootViewController:chartViewController];
[chartViewController release];
[localViewControllersArray addObject:theNavigationController];
[theNavigationController release];
tabBarController.viewControllers = localViewControllersArray;
ChartThemeViewController是ThemeViewController的子类。 ThemeViewController是UIViewController的子类。
如果我在ThemeViewController的子类中覆盖'shouldAutorotateToInterfaceOrientation',并在所有子类中返回YES并在ChartThemeViewController中返回NO ......则会发生所有ViewControllers都不会自动旋转。
mmmmhhh ...希望你能理解这一点......
我该如何解决这个问题?
非常感谢 延答案 0 :(得分:0)
我相信在UITabBarController实例中选择性自动旋转的技巧如下:子类UITabBarController并覆盖方法 - (BOOL)shouldAutorotateToInterfaceOrientation:具有以下内容:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return [[self selectedViewController] shouldAutorotateToInterfaceOrientation:interfaceOrientation];
};
现在,如果您选择仅限纵向标签并旋转到横向,则应用程序将保持纵向。
此处的新问题如下:选择支持支持格局的标签;旋转到景观;选择仅支持纵向的选项卡。哦,哦。仅纵向视图控制器正在横向显示。不幸的是,没有办法强制视图控制器达到特定的方向。
您可以在此处查看问题说明:How to force a screen orientation in specific view controllers?
如您所见,没有真正的解决方案。
我建议禁用所有不支持当前方向的标签。您可以使用以下内容覆盖 - (void)didAutorotateToInterfaceOrientation:在您的UITabBarController子类中实现此目的:
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
UIInterfaceOrientation toInterfaceOrientation = [[UIApplication sharedApplication] statusBarOrientation];
NSArray *items = [[self tabBar] items];
for (NSUInteger i = 0; i < [items count]; i ++)
{
UITabBarItem *item = [items objectAtIndex:i];
if (![[[self viewControllers] objectAtIndex:i] shouldAutorotateToInterfaceOrientation:toInterfaceOrientation])
{
[item setEnabled:NO];
}
else
{
[item setEnabled:YES];
};
};
};
如果您不希望这样做,请考虑更改您的界面,以便能够在所有视图控制器中支持相同的方向。
希望这有帮助,
赖安