我认为标题表明了我试图实施的内容;我在下面描述了我想要实现的目标。我是如何尝试做同样的事情,但取得了部分成功。
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...。
所有建议&最受欢迎的解决方案;提前致谢。