力与对然后将UIViewController的Lock Orientation添加到UINavigationViewController(Nav Controller支持所有方向)

时间:2012-11-10 20:28:21

标签: iphone ipad uiviewcontroller uinavigationcontroller ios6

我认为标题表明了我试图实施的内容;我在下面描述了我想要实现的目标。我是如何尝试做同样的事情,但取得了部分成功。

VC-ViewController NC-NavigationController

我已将NC设置为应用程序的RootVC。为NC编写一个类别覆盖supportedInterfaceOrientations& 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];
} 

我添加支持所有方向的FirstVC&事情在这里很好。

//FirstViewControlle.m

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

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

案例1:当firstVC的方向是Landscape& SecondVC被推上NC,旋转被阻止& SecondVC在景观中加载。

案例2:现在当firstVC处于纵向模式时出现问题&在NC上按下SecondVC,旋转被阻止(asAutorotate设置为NO),但第二个VC在纵向模式下加载。虽然supportedSeterfaceOrientations for secondVC设置为UIInterfaceOrientationMaskLandscape值,但我无法强制定位。 需要在横向加载第二个VC,无论是NC方向还是只要正在查看secondVC,就将其锁定在Landscape中。

// SecondViewControlle.m

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

我在实现上述代码时引用了以下Q& A Force a Portrait...

所有建议&最受欢迎的解决方案;提前致谢。

0 个答案:

没有答案