我有一个具有主视图和详细视图的拆分视图控制器。主视图已在委托功能中修复:
-(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];
}
答案 0 :(得分:0)
您需要做的是将UISplitViewController
嵌入导航控制器本身。您将要隐藏此导航控制器的导航栏,这样您就不会有两个。当您要显示详细视图时,请在拆分视图的导航控制器上按下它。它看起来像这样:
NextViewController *viewController = [...]; \\initialised here;
UISplitViewController *splitVC = self.parentViewController.parentViewController;
[splitVC.navigationController pushViewController:viewController animated:YES];
请注意,这有点脆弱;如果视图控制器层次结构发生更改,则父技巧的父级可能会中断。在您的应用程序委托上保留对顶级导航控制器的引用(它应该是您的密钥窗口的根视图控制器)并以这种方式访问它以便将来证明您的解决方案是明智的。