我有一个iOS7应用程序,它基于Xcode主 - 详细信息模板,我移植到iOS8 . 一个变化很大的领域是 UISplitViewController
.
在纵向模式下,如果用户点击详细视图控制器,则主视图控制器将被关闭:
如果用户点击一行,我还希望能够以编程方式隐藏主视图控制器 .
在iOS 7中,主视图控制器显示为弹出窗口,可以隐藏如下:
[self.masterPopoverController dismissPopoverAnimated:YES];
使用iOS 8,主服务器不再是popover,因此上述技术不起作用 .
我试图解雇主视图控制器:
self.dismissViewControllerAnimated(true, completion: nil)
或者告诉拆分视图控制器显示详细信息视图控制器:
self.splitViewController?.showDetailViewController(bookViewController!, sender: self)
但到目前为止还没有任何工作 . 有任何想法吗?
10 回答
按如下方式扩展UISplitViewController:
在
didSelectRowAtIndexPath
或prepareForSegue
中,执行以下操作:这将使主视图平滑地滑动 .
我有了使用this post中的displayModeButtonItem()的想法,我正在模拟每个this post点击它 .
我对这个解决方案并不满意,因为它看起来像是一个黑客 . 但它运作良好,似乎没有其他选择 .
使用
preferredDisplayMode
. 在didSelectRowAtIndexPath
或prepareForSegue
:不幸的是,主视图突然消失而不是滑离,尽管文档说明:
希望有一个更好的方法来实现这个实际动画变化 .
通过在
MasterViewController
的- prepareForSegue:sender:
方法中添加以下代码,我能够在Xcode 6.3 Master-Detail Application(通用)项目中获得所需的行为:完整的
- prepareForSegue:sender:
实现应该如下所示:在某些项目中,使用
traitCollection
也可能是displayMode
的替代/补充 . 例如,以下代码也适用于Xcode 6.3 Master-Detail Application(通用)项目:下面的代码用动画隐藏主视图
只是改进了这里列出的答案,下面的代码对我来说正常工作,它也可以顺利处理动画:
然后,如上所述,您只需在View控制器的任何位置使用扩展功能
修改上面的答案就是我在配置视图的详细视图控制器的方法中所需的全部内容:
当然它缺乏动画的优雅 .
尝试
我在Swift 1.2中的解决方案
为iPad添加这样的菜单按钮
这项工作非常适合横向和纵向模式 . 要以编程方式关闭popover vc,您只需要像这样强制执行按钮操作
Swift 4更新:
插入准备(对于segue:...