我有一个基于Xcode主细节模板的iOS7应用程序,我正在将其移植到iOS8.一个变化很大的领域是UISplitViewController.

在纵向模式下,如果用户点击细节视图控制器,主视图控制器将被解除:

在此处输入图像描述

如果用户点击一行,我还希望能够通过编程隐藏主视图控制器.

在iOS 7中,主视图控制器显示为弹出窗口,可以按如下方式隐藏:

[self.masterPopoverController dismissPopoverAnimated:YES];

在iOS 8中,主机不再是popover,因此上述技术将不起作用.

我试图关闭主视图控制器:

self.dismissViewControllerAnimated(true, completion: nil)

或者告诉拆分视图控制器显示详细信息视图控制器:

self.splitViewController?.showDetailViewController(bookViewController!, sender: self)

但到目前为止,一切都没有奏效.有什么 idea 吗?

推荐答案

按如下方式扩展UISplitViewController:

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

didSelectRowAtIndexPathprepareForSegue中,执行以下操作:

self.splitViewController?.toggleMasterView()

这将使主视图顺利滑出.

我是从this post开始使用displayModeButtonItem()的,我正在模拟每this post次点击它.

我对这个解决方案不是很满意,因为它看起来像一个黑客.但它运行良好,似乎还没有其他 Select .

Swift相关问答推荐

更改正在进行的异步任务的完成(SWIFT并发)(&q;)?

在Swift中,将秒设置为0也等于将1添加到分钟

如何在 swiftui 中设置给定字符串类型日期的日期倒计时?

NavigationStack 和 TabView - 工具栏和标题不显示

如何将变量添加到不属于可解码部分的 struct ?

RxSwift 中 Single.just(...) 和 Observable.just(...) 之间有区别吗?

iOS16 Bug 键盘在表单解雇 SwiftUI 时打破布局

闭包 - deinit self 对象的时间

为什么 performSegue() 不调用 shouldPerformSegue()

SwiftUI:调用以编程方式创建的视图的函数

如何处理永远不会失败的 String.Encoding 初始化程序?

为什么更改属性后动画会加速? SwiftUI

在 Swift 中,如何查看 Process() 传递给 shell 的字符串?

Swift 2 或 3 中的 Google Analytics 问题

AES 加密和解密

Swift 4 Decodable - 以枚举为键的字典

调整文本的字体大小以适应 UIButton

使用 DispatchTime.now() + float 延迟?

SwiftUI - 呈现工作表后导航栏按钮不可点击

TabView 在切换选项卡时重置导航堆栈