UIViewController旋转问题

时间:2010-09-10 16:13:01

标签: iphone objective-c

我有一个带有不同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 ...希望你能理解这一点......

我该如何解决这个问题?

非常感谢 延

1 个答案:

答案 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];
        };
    };
};

如果您不希望这样做,请考虑更改您的界面,以便能够在所有视图控制器中支持相同的方向。

希望这有帮助,

赖安