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

时间:2014-05-13 14:08:11

标签: ios objective-c uinavigationcontroller uisplitviewcontroller

我有一个具有主视图和详细视图的拆分视图控制器。主视图已在委托功能中修复:

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

当我点击详细视图上的按钮时,它会导航到新屏幕。但是在新屏幕上它仍然显示主视图。

导航代码:

 NextViewController *viewController = [...]; \\initialised here;
 [self.navigationController pushViewController:viewController animated:YES];

我的问题: 1.当我从详细视图控制器导航到新屏幕时,它应该将下一个屏幕显示为全屏。怎么做?
注意:我不想使用" presentViewController"由于两个原因显示下一个屏幕 1.我想使用导航堆栈来到前一个屏幕 2.所有屏幕也都基于Tab栏控制器,如果我使用" presentViewController"然后标签栏控制器不再对新屏幕可见。

阅读本文后: How to hide & unhide Master View Controller in SplitView Controller

解决方案: 最后我的问题解决了:

// 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];
}

1 个答案:

答案 0 :(得分:0)

您需要做的是将UISplitViewController嵌入导航控制器本身。您将要隐藏此导航控制器的导航栏,这样您就不会有两个。当您要显示详细视图时,请在拆分视图的导航控制器上按下它。它看起来像这样:

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

UISplitViewController *splitVC = self.parentViewController.parentViewController;

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

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