我有一个标签栏应用程序。第一个选项卡的项目是导航控制器。导航控制器的堆栈中有 4 个项目。我想提供轮换。但是在标签栏应用程序中,这是问题所在,这就是我创建自己的标签栏控制器并覆盖该方法的原因:
@interface RotatingTabBarController : UITabBarController
@end
@implementation RotatingTabBarController
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
if([self.selectedViewController isKindOfClass:[UINavigationController class]]){
BOOL f = [[(UINavigationController*)self.selectedViewController visibleViewController] shouldAutorotateToInterfaceOrientation:toInterfaceOrientation];
return f;
} else {
BOOL f = [self.selectedViewController shouldAutorotateToInterfaceOrientation:toInterfaceOrientation];
return f;
}
}
@end
之后,如果我提供适当的 UIInterfaceOrientation 支持,我的控制器将支持自动旋转。但是没有我的自定义 RotatingTabBarController 这似乎是不可能的
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
问题是:当我在此视图控制器的 shouldAutorotateToInterfaceOrientation 中的导航控制器中推送 FirstViewController 时,我只提供纵向,但是当我推送 SecondViewController(我提供纵向和横向)时,如果 SecondViewController 的当前界面方向是横向并且我按下按钮(SecondViewController 从堆栈弹出并出现 FirstViewController),FirstViewController 的方向是横向的。但在 shouldAutorotateToInterfaceOrientation 方法中,我只为他提供纵向方向。