2016-11-22 7 views
2

主人。UISplitViewController:如何强制显示我使用的是<code>UISplitViewController</code>,与<strong>主</strong>和<strong>细节</strong> viewcontrollers,没有UINavigationControllers视图 - 控制

在某些情况下(例如,当点击通用链接时),我希望强制应用始终显示主视图控制器。

我该怎么做?

有没有办法通过编程方式从细节切换回主控?

+0

这是你在找什么:http://stackoverflow.com/questions/25875618/uisplitviewcontroller-in-portrait-on-iphone-shows- detail-vc-instead-of-master – zombie

+0

你好@zombie这个答案似乎在讨论总是通过设置一些委托函数来启动应用程序。但在我的情况下,我想手动关闭详细视图控制器。必须有办法做到这一点? –

回答

1

您可以设置preferredDisplayMode

self.splitViewController?.preferredDisplayMode = UISplitViewControllerDisplayMode.allVisible 

或者,如果你正在寻找的东西像一个切换操作:

extension UISplitViewController { 
    func toggleMasterView() { 
     let barButtonItem = self.displayModeButtonItem 
     UIApplication.shared.sendAction(barButtonItem.action!, to: barButtonItem.target, from: nil, for: nil) 
    } 
} 

用法:

self.splitViewController?.toggleMasterView() 
0

拆分视图控制器是一个野兽,而且文件很混乱。最好把它看作是以两种不同的模式运作:崩溃与否。当分割视图以横向紧凑视图(即iPhone)显示时,适用折叠模式,否则折叠模式不折叠(即iPad)。

财产preferredDisplayMode仅适用于视图未折叠(即iPad),并且您可以使用它来选择主视图或详细视图。

在折叠模式下,除非使用的是导航控制器,原始主视图可以被丢弃:

已经折叠后,将具有在其viewControllers 只有一个子视图控制器拆分视图控制器报告属性。该 其他视图控制器被折叠成其他视图控制器的 内容与委托对象的帮助或暂时放弃

但它是更好的使用的导航控制器,如分割视图控制器被设计为工作在与他们合作:

分割视图控制器知道如何以更直观的方式调整接口。它甚至可以与其他容器视图控制器 (如导航控制器)一起使用以呈现视图控制器。

如果使用导航控制器,然后原来的主视图可以是在导航堆栈的底部:

在水平紧凑环境中,分割视图控制器作用 更像一个导航控制器最初显示的主视图 控制器和推或弹出需要

所以,你可以这样做次要视图 控制器这个:

if split.isCollapsed, 
    let nav = split.viewControllers[0] as? UINavigationController 
{ 
    nav.popToRootViewController(animated:false) 
} else { 
    split.preferredDisplayMode = .allVisible 
} 

(它可以变得更复杂,如果你的主视图在主视图中推动视图以及显示细节视图。此代码将弹出到主视图导航堆栈的根)

相关问题