我有一个UITabBarController,每个选项卡都处理一个不同的UIViewController,该UIViewController根据需要将新的 Controller 插入堆栈。在其中的两个选项卡中,我需要在到达特定 Controller 时能够旋转iPhone并以横向模式显示 View 的功能。经过很多努力后,我发现强制覆盖UITabBarController的子类以重写shouldAutorotateToInterfaceOrientation。但是,如果我只是在实现中返回YES,则会出现以下不良后果:

旋转iPhone时,每个选项卡中的每个 Controller 都会自动进入横向模式。

甚至在每个 Controller 中都应该覆盖以返回NO的AutoAutoateateToInterfaceOrientation也不起作用:旋转iPhone时, Controller 将置于横向模式。

我在子类UITabBarController中实现了shouldAutorotateToInterfaceOrientation,如下所示:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    if([self selectedIndex] == 0 || [self selectedIndex] == 3)
        return YES;

    return NO;
}

这样,只有我感兴趣的两个选项卡才能真正获得横向模式的支持。
有没有一种方法可以支持特定选项卡堆栈上的特定 Controller 的横向模式?

我尝试了类似的尝试,但没有成功

(BOOL)应该AutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
if([self selectedIndex] == 0 || [self selectedIndex] == 3)
{
   if ([[self selectedViewController] isKindOfClass: [landscapeModeViewController class]])
           return YES;
    }

     return NO;

}

另外,我尝试使用委托(delegate)方法didSelectViewController,但没有成功。
任何帮助是极大的赞赏。
谢谢你。

最佳答案

这为我工作:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    if(self.selectedIndex == 0 && [[[self.viewControllers objectAtIndex:0] visibleViewController] isKindOfClass:[MyViewController class]])
        return YES;
    else
        return NO;
}

关于iphone - 横向模式下的tabBarController和navigationControllers,第二集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/756536/

10-12 18:37