Ios 如果从详细视图控制器导航到新屏幕,如何隐藏主视图

Ios 如果从详细视图控制器导航到新屏幕,如何隐藏主视图,ios,objective-c,uinavigationcontroller,uisplitviewcontroller,Ios,Objective C,Uinavigationcontroller,Uisplitviewcontroller,我有一个带有主视图和详细视图的分割视图控制器。主视图在代理功能中是固定的: -(BOOL)splitViewController:(UISplitViewController *)svc shouldHideViewController: (UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation { return enableMaster; } 当我单击详细视图上的按钮时,它将导航到一个新屏幕。

我有一个带有主视图和详细视图的分割视图控制器。主视图在代理功能中是固定的:

-(BOOL)splitViewController:(UISplitViewController *)svc shouldHideViewController:  
(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation
{
    return enableMaster;
}
当我单击详细视图上的按钮时,它将导航到一个新屏幕。但在新屏幕上,它仍然显示主视图

导航代码:

 NextViewController *viewController = [...]; \\initialised here;
 [self.navigationController pushViewController:viewController animated:YES];
我的问题: 1.当我从detail view controller导航到新屏幕时,它应该以全屏显示下一个屏幕。怎么做?
注意:由于两个原因,我不想使用“presentViewController”显示下一个屏幕。
1.我想使用导航堆栈进入上一屏幕
2.所有的屏幕也基于选项卡栏控制器,如果我使用“presentViewController”,那么选项卡栏控制器对于新屏幕不再可见

读完这篇文章:

解决方案: 我的问题终于解决了:

// In split delegate
-(void)hideMaster:(BOOL)hideState
{
   _masterIsHidden = hideState;
  [self.splitViewController.view setNeedsLayout];
   self.splitViewController.delegate = nil;
   self.splitViewController.delegate = self;
   [self.splitViewController willRotateToInterfaceOrientation:[UIApplication    
    sharedApplication].statusBarOrientation duration:0];
}

-(BOOL)splitViewController:(UISplitViewController *)svc shouldHideViewController: 
(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation
{
    return self.masterIsHidden;
}

//Call On button:
-(void) btn_click
{
     [self hideMaster: TRUE];
}

您需要做的是将
UISplitViewController
嵌入导航控制器本身。您将要隐藏此导航控制器的导航栏,以避免出现两个导航栏。当您要显示局部视图时,将其推到分割视图的导航控制器上。它看起来像这样:

NextViewController *viewController = [...]; \\initialised here;

UISplitViewController *splitVC = self.parentViewController.parentViewController;

[splitVC.navigationController pushViewController:viewController animated:YES];

注意,这有点脆弱;如果视图控制器层次结构发生更改,则父技巧的父技巧可能会中断。明智的做法是,在应用程序代理上保留对顶级导航控制器的引用(它应该是关键窗口的根视图控制器),并以这种方式访问它,以证明您的解决方案是可靠的

这不会在下一个屏幕上隐藏主视图。它仍然可见。我想将我的下一个屏幕显示为全屏,而不是拆分的屏幕。此帖子解决了我的问题: