我有一个使用情节提要创建的iPad应用程序。我创建了另一个单独的viewController,它是使用单独的.xib文件创建的。我需要从主应用程序调用此viewController,然后在以后关闭以返回到主应用程序。到目前为止,我已经能够做到。我的问题是,因为我使用导航控制器来调用此辅助视图控制器,所以无法以横向模式加载此视图控制器。我只能以纵向模式加载它。通过本次论坛讨论以及我所做的任何研究,我了解到需要对导航控制器进行子类化,然后才能以横向模式加载此辅助视图控制器。
我的辅助视图控制器(NextViewController)中包含以下方法,但无效:
-(BOOL)shouldAutorotate
{
return YES;
}
-(NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskLandscape;
}
这是调用viewController(MainViewController)中的代码,该代码调用NextViewController,而NextViewController依次以纵向模式而不是所需的横向模式显示:
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
_nextView = [[NextLandscapeViewController alloc] initWithNibName:@"NextLandscapeViewController" bundle:nil];
[_nextView setDelegate:(id)self];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:_nextView];
[self presentViewController:navigationController animated:YES completion:nil];
}
正如我所指出的那样,我需要的解决方案是对导航控制器进行子类化,但是老实说,我以前从未做到过,也不知道该怎么做。有人可以告诉我如何做到这一点,以便我可以调用NextViewController并将其以横向模式显示吗?
在此先感谢所有答复。
最佳答案
对于来自Navigation Controller的子类进行定向,您可以尝试以下代码(例如):
// .h - file
@interface MyNavigationController : UINavigationController
@end
// .m - file
#import "MyNavigationController.h"
@implementation MyNavigationController
-(BOOL)shouldAutorotate
{
return [self.topViewController shouldAutorotate];
}
-(NSUInteger)supportedInterfaceOrientations
{
return [self.topViewController supportedInterfaceOrientations];
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return [self.topViewController preferredInterfaceOrientationForPresentation];
}
@end
upd :(此代码在ios6上有效)
关于ios - 尝试子类化导航 Controller ,以便在iOS的横向模式下使用单独的.xib文件加载外部View Controller,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18426356/