UISplitViewController 如何显示主视图?

UISplitViewController how to show the master view?

我需要一个非常简单的东西 - 在我的 UISplitViewController 的详细视图之一中,我有一个按钮。单击它应该 show/open 主视图。而已。有可能吗?

P.S. 它应该适用于所有布局(iphone & ipad)和方向。即使详细视图部分是导航,我在几个页面中很深,也只想打开主视图。你可以假设 iOS8+.


编辑: 只是为了澄清我所说的 "deep inside several pages" 的意思。这是我的故事板截图:

假设我在 详细信息页面 2 中有一个按钮应该显示主页面。设置 preferredDisplayMode 仅适用于非紧凑尺寸,例如 iPad。例如,在 iPhone 6 上,设置后没有任何变化。后退按钮指向 详细信息页面 1,因此即使滑动也不会打开主页面,它会转到详细导航的上一页。我注意到在这种模式下根本没有拆分视图,它是由导航控制器模拟的。所以问题是:我需要什么是可能的,或者我试图在概念上将其视为可以在任何情况下和设备上打开的 "left drawer" 是错误的吗?

在 iOS8+ 您可以使用更改主视图的可见性 动画 属性 preferredDisplayMode

@property (nonatomic) UISplitViewControllerDisplayMode preferredDisplayMode

更改所有 iOS 版本可见性的通用方法是覆盖委托方法

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

这里 _needsHideMasterView 是 BOOL ivar,可以在您的代码中更改它以隐藏主视图。例如,

- (void)hideMasterView:(BOOL)needsHide
{
    _needsHideMasterView = needsHide;

    [splitViewController.view setNeedsLayout];
    [splitViewController.view layoutIfNeeded];
}

尝试将 preferredDisplayMode 设置为 UISplitViewControllerDisplayModeAllVisible,例如

    self.splitViewController.preferredDisplayMode = UISplitViewControllerDisplayModeAllVisible;