我该如何忽略一个模态视图控制器以及它的被推送的父级?
self.presentingViewController?.dismiss(animated: true, completion: {
self.parent?.navigationController?.popViewController(animated: true)
})这只会忽略顶级模式。
发布于 2021-02-06 10:50:05
你可以走另一条路。首先,您的主视图中有UINavigationController。因此,您可以编写一个扩展,允许您转到导航堆栈中的控制器。
我试着像这样做一个实现:
extension UINavigationController {
func routingPath(for controller: UIViewController) -> [UIViewController] {
guard viewControllers.contains(controller) else {
return []
}
var result: [UIViewController] = []
for previousController in viewControllers {
result.append(previousController)
if controller === previousController {
break
}
}
return result
}
func performNavigation(toPrevious controller: UIViewController,
shouldDismissModals: Bool = true) {
let previousViewControllers = routingPath(for: controller)
guard !previousViewControllers.isEmpty else { return }
viewControllers = previousViewControllers
if shouldDismissModals, let _ = controller.presentedViewController {
controller.dismiss(animated: true, completion: nil)
}
}
}然后您可以为UIViewController创建一个特殊的方法
extension UIViewController {
func returnBackIfPossible(to controller: UIViewController? = nil,
shouldDismissModals: Bool = true) {
navigationController?.performNavigation(toPrevious: controller ?? self,
shouldDismissModals: shouldDismissModals)
}
}然后,您需要将Home控制器的引用传递给所有下一个控制器(或将其存储在某个位置)。接下来,当需要时,可以调用homeViewController?.returnBackIfPossible()方法,该方法将关闭所有通道并重置导航堆栈。
发布于 2021-02-06 08:31:03
什么是非模态父级?
它是导航控制器推送的视图控制器吗?
如果发生这种情况,您必须从导航控制器中弹出视图控制器。
https://stackoverflow.com/questions/66069909
复制相似问题