Dan*_*e B 5 master-detail uisplitviewcontroller ios swift
我正在使用a UISplitViewController,使用master和detail viewcontrollers,没有UINavigationControllers.
在某些情况下(例如,当点击通用链接时),我想强制应用程序始终显示主视图控制器.
我怎样才能做到这一点?
有没有办法以编程方式从细节切换回主数据?
拆分视图控制器是一头野兽,文档令人困惑。最好将其视为在两种不同模式下运行来了解:崩溃或不崩溃。当在水平紧凑视图中显示拆分视图(即iPhone)时,将应用折叠模式,否则将其折叠(即iPad)。
仅当视图未折叠时(即iPad),preferredDisplayMode属性才适用,您可以使用它来选择主视图或局部视图。
在折叠模式下,除非使用导航控制器,否则原始主视图可能会被丢弃:
折叠后,拆分视图控制器报告其viewControllers属性中只有一个子视图控制器。在委托对象的帮助下,另一个视图控制器折叠到另一个视图控制器的内容中,或被暂时丢弃
但是,最好使用导航控制器,因为拆分视图控制器旨在与它们结合使用:
拆分视图控制器知道如何以更直观的方式调整界面。它甚至可以与其他容器视图控制器(例如导航控制器)一起显示视图控制器。
如果使用导航控制器,则原始主视图可能位于导航堆栈的底部:
在水平紧凑的环境中,拆分视图控制器的行为更类似于导航控制器,首先显示主视图控制器,然后根据需要推入或弹出辅助视图控制器
因此,您可以执行以下操作:
if split.isCollapsed,
let nav = split.viewControllers[0] as? UINavigationController
{
nav.popToRootViewController(animated:false)
} else {
split.preferredDisplayMode = .allVisible
}
Run Code Online (Sandbox Code Playgroud)
(如果您的主视图将主视图推入主视图并显示详细视图,则可能会变得更加复杂。此代码将弹出到主视图导航堆栈的根目录中)
您可以设置preferredDisplayMode
self.splitViewController?.preferredDisplayMode = UISplitViewControllerDisplayMode.allVisible
Run Code Online (Sandbox Code Playgroud)
或者,如果您正在寻找诸如切换操作之类的东西:
extension UISplitViewController {
func toggleMasterView() {
let barButtonItem = self.displayModeButtonItem
UIApplication.shared.sendAction(barButtonItem.action!, to: barButtonItem.target, from: nil, for: nil)
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
self.splitViewController?.toggleMasterView()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3359 次 |
| 最近记录: |