Dan*_*e B 7 master-detail uisplitviewcontroller ios swift
如何检测UISplitViewController当前是仅显示1个视图控制器还是在双窗格中,并排显示2个视图控制器?
Ord*_*Dei 10
拆分视图控制器反映了displayMode属性中的实际显示模式:
AllVisible:主要和辅助UIViewControllers并排显示.
PrimaryHidden:主要的UISplitViewController被隐藏.
PrimaryOverlay:主要UISplitViewController覆盖辅助节点,它是部分可见的.
当isCollapsed属性为true时,将忽略displayMode属性的值.折叠的拆分视图界面仅包含一个视图控制器,因此显示模式是多余的.
简历:要查看屏幕上的详细情况,请使用isCollapsed属性和 (如果isCollapsed = false)displayMode属性.
这是一个简单的案例:
您在MasterViewController上并选择了一个单元格.现在,根据UISplitViewController是否折叠,你想要执行一个segue(用红色圈出)
到DetailViewController(折叠)或更新DetailViewController(未折叠).
在MasterViewController上的"didSelectRowAtIndexPath"方法中获取对UISplitViewController的引用,并选择如下操作:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
//Reference to Split View
guard let splitView = self.splitViewController else {
return
}
//Check the collapsed property
if splitView.collapsed {
self.performSegueWithIdentifier("segueToDetail", sender: self)
}else {
//Get reference to your details navigation controller
guard let detailViewNavigationController = self.splitViewController?.viewControllers[1] as? UINavigationController else {
return
}
//Get a reference to your custom detail view controller
guard let detailController = detailViewNavigationController.viewControllers[0] as? MyCustomViewController else {
return
}
//Call your custom function to update the detail view controller
detailController.updateSomething()
}
}
Run Code Online (Sandbox Code Playgroud)
如果您不想使用UISplitViewController的"collapsed"属性,可以像这样检查视图控制器属性的数量.
if splitView.viewControllers.count == 1 {
self.performSegueWithIdentifier("segueToDetail", sender: self)
}else splitView.viewControllers.count == 2 {
guard let detailViewNavigationController = self.splitViewController?.viewControllers[1] as? UINavigationController else {
return
}
guard let detailController = detailViewNavigationController.viewControllers[0] as? MyCustomViewController else {
return
}
detailController.updateSomething()
}
Run Code Online (Sandbox Code Playgroud)
另一个选项是从主视图控制器到详细视图控制器设置委派.如果你不想像这个例子那样必须到达视图控制器链,这将很有效.这是关于此方法的教程.请注意"使用详细信息连接主人"部分.
请注意:我测试了UISplitViewControllers"displayMode"属性的切换.这个属性没有给我足够的信息来弄清楚要做什么.原因是当您处于水平紧凑模式和水平扩展模式时,属性设置为.AllVisible.
最后,在我走之前.我喜欢我的方式,因为很多时候你知道你需要一个UISplitViewController,所以你从模板创建一个项目.你会注意到模板附带了segue设置.这个模板适用于手机,但不适用于iPad和iPhone6 +.如果在创建项目后将UISplitViewController拖放到故事板上,您会注意到详细视图既未嵌入UINavigationController中,也未存在从主控制到详细信息的segue.设想我想更多!
UISplitViewController 有一个名为“collapsed”的属性。
| 归档时间: |
|
| 查看次数: |
4343 次 |
| 最近记录: |