对于我的应用程序,我创建了一个嵌入到容器视图中的拆分视图,即拆分视图不在应用程序的根目录中。
从图像中可以看出,我在主视图中添加了一个导航项,该导航项用作后退按钮,并从主导航堆栈弹出整个拆分视图。
@IBAction func backButtonTapped(_ sender: UIBarButtonItem) {
parent?.navigationController?.popViewController(animated: true)
}
当我将拆分视图的显示模式设置为allVisible
时,这在所有设备上都运行良好。它适用于折叠视图(例如,在iPhone纵向模式下)和展开的拆分视图。
问题:当我使用Auto
或primaryHidden
之类的其他显示模式时,主视图中的导航按钮仍然显示,但在横向(展开)视图中不起作用。调用了按钮处理程序,但是上面的语句并未脱离拆分视图。似乎无法以这种方式访问父级的导航控制器(= nil)。为什么该语句在某些显示模式下不起作用,如何使它起作用?
答案 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)
}
}