拆分视图中主视图的向后导航不适用于“自动”或“主要隐藏”显示模式

时间:2019-04-08 09:19:26

标签: ios swift uinavigationbar uisplitviewcontroller

对于我的应用程序,我创建了一个嵌入到容器视图中的拆分视图,即拆分视图不在应用程序的根目录中。

从图像中可以看出,我在主视图中添加了一个导航项,该导航项用作后退按钮,并从主导航堆栈弹出整个拆分视图。

@IBAction func backButtonTapped(_ sender: UIBarButtonItem) {
    parent?.navigationController?.popViewController(animated: true)
}

当我将拆分视图的显示模式设置为allVisible时,这在所有设备上都运行良好。它适用于折叠视图(例如,在iPhone纵向模式下)和展开的拆分视图。

enter image description here

问题:当我使用AutoprimaryHidden之类的其他显示模式时,主视图中的导航按钮仍然显示,但在横向(展开)视图中不起作用。调用了按钮处理程序,但是上面的语句并未脱离拆分视图。似乎无法以这种方式访问​​父级的导航控制器(= nil)。为什么该语句在某些显示模式下不起作用,如何使它起作用?

1 个答案:

答案 0 :(得分:0)

这感觉有些笨拙,但是可以完成工作。更好的解决方案可能是通过理解为什么在某些显示模式下可访问父导航控制器,而在其他显示模式下无法访问。

起作用的是通过详细视图的导航控制器并将其从堆栈中删除。此处更改了显示模式,以防止出现难看的过渡效果。

@IBAction func backButtonTapped(_ sender: UIBarButtonItem) {

    if (splitViewController!.viewControllers.count > 1) {
        // master and detail visible in split view
        let detailViewController = splitViewController!.viewControllers[1]
        splitViewController!.preferredDisplayMode = .primaryHidden
        detailViewController.navigationController?.popViewController(animated: true)
    } else {
        // split view collapsed into single view mode (e.g. iPhone portrait)
        parent?.navigationController?.popViewController(animated: true)
    }
}