Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试将导航控制器子类化,以便在iOS中以横向模式加载带有单独.xib文件的外部视图控制器_Ios_Uiviewcontroller_Uinavigationcontroller_Xib_Navigationcontroller - Fatal编程技术网

尝试将导航控制器子类化,以便在iOS中以横向模式加载带有单独.xib文件的外部视图控制器

尝试将导航控制器子类化,以便在iOS中以横向模式加载带有单独.xib文件的外部视图控制器,ios,uiviewcontroller,uinavigationcontroller,xib,navigationcontroller,Ios,Uiviewcontroller,Uinavigationcontroller,Xib,Navigationcontroller,我有一个我用故事板创建的iPad应用程序。我创建了另一个viewController,它是使用单独的.xib文件创建的。我需要从主应用程序调用此viewController,然后关闭以返回主应用程序。到目前为止,我能够做到这一点。我的问题是,因为我正在使用导航控制器调用此辅助视图控制器,所以无法在横向模式下加载此视图控制器。我只能在纵向模式下加载它。通过这个论坛,以及我所做的任何研究,我了解到我需要对导航控制器进行子类化,然后这就是我如何能够在横向模式下加载这个辅助视图控制器 我已在次视图控制器

我有一个我用故事板创建的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,让它以横向模式显示吗


提前感谢所有回复者。

对于导航控制器中用于方向的子类,您可以尝试以下代码(例如):


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