我有一个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/