1

我相信标题暗示了我正在尝试实施的内容;我在下面描述了我想要实现的目标以及我如何尝试做同样的事情但取得了部分成功。

VC-ViewController NC-导航控制器

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

- (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];
} 

我正在添加支持所有方向的 FirstVC,这里一切正常。

//FirstViewControlle.m

-(BOOL)shouldAutorotate
 {
   return YES;
 }
-(NSUInteger)supportedInterfaceOrientations
 {
   return UIInterfaceOrientationMaskAll;
 }

从第一个 VC 开始,我使用 pushViewController 将另一个 VC (SecondVC) 添加到 NC。

案例一:firstVC 的方向是 Landscape 并且 SecondVC 被推到 NC 上时,旋转被阻止并且 SecondVC 是横向加载的。

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

//SecondViewControlle.m

-(BOOL)shouldAutorotate
 {
   return NO;
 }
-(NSUInteger)supportedInterfaceOrientations
 {
   return UIInterfaceOrientationMaskLandscape;
 }

在实现上述代码时,我参考了以下问答强制肖像...。

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

4

0 回答 0