尝试将导航控制器子类化,以便在iOS中以横向模式加载带有单独.xib文件的外部视图控制器
我有一个我用故事板创建的iPad应用程序。我创建了另一个viewController,它是使用单独的.xib文件创建的。我需要从主应用程序调用此viewController,然后关闭以返回主应用程序。到目前为止,我能够做到这一点。我的问题是,因为我正在使用导航控制器调用此辅助视图控制器,所以无法在横向模式下加载此视图控制器。我只能在纵向模式下加载它。通过这个论坛,以及我所做的任何研究,我了解到我需要对导航控制器进行子类化,然后这就是我如何能够在横向模式下加载这个辅助视图控制器 我已在次视图控制器(NextViewController)中包括了以下方法,但没有效果:尝试将导航控制器子类化,以便在iOS中以横向模式加载带有单独.xib文件的外部视图控制器,ios,uiviewcontroller,uinavigationcontroller,xib,navigationcontroller,Ios,Uiviewcontroller,Uinavigationcontroller,Xib,Navigationcontroller,我有一个我用故事板创建的iPad应用程序。我创建了另一个viewController,它是使用单独的.xib文件创建的。我需要从主应用程序调用此viewController,然后关闭以返回主应用程序。到目前为止,我能够做到这一点。我的问题是,因为我正在使用导航控制器调用此辅助视图控制器,所以无法在横向模式下加载此视图控制器。我只能在纵向模式下加载它。通过这个论坛,以及我所做的任何研究,我了解到我需要对导航控制器进行子类化,然后这就是我如何能够在横向模式下加载这个辅助视图控制器 我已在次视图控制器
-(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,让它以横向模式显示吗
提前感谢所有回复者。对于导航控制器中用于方向的子类,您可以尝试以下代码(例如):
upd:(此代码在ios6上工作)非常感谢您的及时回复。您的代码正在运行,但我注意到一个小故障。它的工作原理与我第一次运行它时所希望的完全一样,但是,在随后的运行中,整个应用程序现在以横向模式显示。我只需要被调用的视图控制器仅处于横向模式。我有办法纠正这个吗?嗯。。我不知道。。我用了下一种方式——在方法supportedInterfaceOrientations返回纵向时,我创建了Coommon viewcontroller。所有的VC子类都期望有一些需要水平方向。就我而言,这是可行的。你可以试试看。
// .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