Iphone 警队及;然后锁定添加到UINavigationViewController的UIViewController的方向(导航控制器支持所有方向)

Iphone 警队及;然后锁定添加到UINavigationViewController的UIViewController的方向(导航控制器支持所有方向),iphone,ipad,uiviewcontroller,uinavigationcontroller,ios6,Iphone,Ipad,Uiviewcontroller,Uinavigationcontroller,Ios6,我相信这个标题暗示了我想要实现的东西;下面我将描述我试图实现的目标&我是如何尝试实现同样的目标,但取得了部分成功的 VC视图控制器NC导航控制器 我已将NC设置为应用程序的RootVC。编写了一个NC覆盖支持的接口方向和shouldAutorotate方法的类别 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.w

我相信这个标题暗示了我想要实现的东西;下面我将描述我试图实现的目标&我是如何尝试实现同样的目标,但取得了部分成功的

VC视图控制器NC导航控制器

我已将NC设置为应用程序的RootVC。编写了一个NC覆盖支持的接口方向和shouldAutorotate方法的类别

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

self.window.backgroundColor = [UIColor whiteColor];

[self.window makeKeyAndVisible];

UINavigationController *appNavController = [[UINavigationController alloc]init];
appNavController.view.backgroundColor = [[UIColor redColor]colorWithAlphaComponent:0.5];

self.window.rootViewController = appNavController;
[self.window addSubview:appNavController.view];

FirstViewController *_firstViewController = [[FirstViewController alloc]init];
[appNavController pushViewController:_firstViewController animated:YES];
[_firstViewController release];

return YES;
}
UINavigationController//UINavigationController.m的类别

@implementation UINavigationController(Rotation)

-(BOOL)shouldAutorotate
{
    return [[self.viewControllers lastObject] shouldAutorotate];
}

-(NSUInteger)supportedInterfaceOrientations
{
     return [[self.viewControllers lastObject] supportedInterfaceOrientations];
}

-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
     return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];
} 
我添加了支持所有方向的第一个VC,在这里一切顺利

//FirstViewControlle.m

-(BOOL)shouldAutorotate
 {
   return YES;
 }
-(NSUInteger)supportedInterfaceOrientations
 {
   return UIInterfaceOrientationMaskAll;
 }
从第一个VC开始,我使用pushViewController将另一个VC(第二个VC)添加到NC

案例1:当firstVC的方向为横向,并且在NC上按下SecondVC时,旋转被阻止,SecondVC加载到横向

案例2:现在当firstVC处于纵向模式时出现问题,并且在NC上按下SecondVC,旋转被阻止(因为shouldAutorotate设置为否),但第二个VC在纵向模式下加载。在这里,我无法强制定向,尽管secondVC的SupportedInterfaceOrientions设置为UIInterfaceOrientationMaskLandscape值。 需要在横向加载secondVC,无论是NC方向,只要正在查看secondVC,就将其锁定在横向。

//SecondViewControlle.m

-(BOOL)shouldAutorotate
 {
   return NO;
 }
-(NSUInteger)supportedInterfaceOrientations
 {
   return UIInterfaceOrientationMaskLandscape;
 }
在实现上述代码时,我参考了以下问答


欢迎所有建议和解决方案;提前谢谢

你应该从你提到的相同的问答中使用最近的答案:也考虑“YouDutoRutoTATE”返回“是”,并且只返回支持方位的一个方向。