我正在尝试遵循上一个问题,以允许导航控制器视图控制器具有不同的方向规则。上一个问题
例如,我有两个视图控制器,第一个是 Welcome,第二个是 Home。我希望第一个视图控制器只能是 Potrait,第二个(Home)允许端口/景观。
我不确定我是否完全了解如何完成此操作。一旦我这样做了,我打算创建一个单独的项目来解释如何做到这一点,并将该问题添加到 Github/share 以供将来参考。
在这个特定的项目中,我使用了一个侧视图控制器 github 项目。PPRevealSideViewController。
我的应用代表如下:
// Then we setup the reveal side view controller with the root view controller as the navigation controller
welcomeViewController = [[MESWelcomeViewController alloc] init];
UINavigationController *navController = [[MESNavViewControllerSubClass alloc] initWithRootViewController:welcomeViewController];
self.revealSideViewController = [[PPRevealSideViewController alloc] initWithRootViewController:navController];
[self.revealSideViewController setDirectionsToShowBounce:PPRevealSideDirectionNone];
[self.revealSideViewController setPanInteractionsWhenClosed:PPRevealSideInteractionContentView | PPRevealSideInteractionNavigationBar];
//self.window.rootViewController = welcomeViewController;
self.window.rootViewController = self.revealSideViewController;
[self.window makeKeyAndVisible];
从上面你可以看到我已经将导航控制器子类化为 MESNavViewController。这是我对这个文件的看法:
@interface MESNavViewControllerSubClass : UINavigationController {
BOOL setLandscapeOK;
}
MESNavViewController 的 Imp 文件:
-(void)viewDidLoad {
NSLog(@"subclass called");
}
- (BOOL)shouldAutorotate
{
return YES;
}
- (NSUInteger)supportedInterfaceOrientations
{
if (self->setLandscapeOK) {
// for iPhone, you could also return UIInterfaceOrientationMaskAllButUpsideDown
return UIInterfaceOrientationMaskAll;
}
return UIInterfaceOrientationMaskPortrait;
}
在我的第一个(欢迎)视图控制器中,我有以下内容:
-(void)viewWillAppear {
BOOL setLandscapeOK = NO;
}
- (NSInteger)supportedInterfaceOrientations {
// Restriction for the welcome page to only allow potrait orientation
return UIInterfaceOrientationMaskPortrait;
}
在我的第二个(主页)视图控制器中,我只有以下内容:
-(void)viewWillAppear {
BOOL setLandscapeOK = YES;
}
我看到的是导航中的两个视图控制器都允许任何方向。我不确定我是否理解正确。希望我提供了足够的信息。
编辑-----我已经更新了 PPRevealSidePanel 子类,它是最顶层的控制器。然后它持有导航控制器,而导航控制器又持有视图控制器。方向应由显示的视图控制器决定。
PPRevealSidePanel 子类 -
其次,我收到一个错误,试图在实际的视图控制器上更新这个子类的设置器 setLandscapeOK。登录视图控制器 -