如何从另一个视图控制器中删除以前的视图控制器或我想要的控制器



我想取消当前不在顶部的视图控制器。

我展示了一个视图控制器,当我展示它时,我希望关闭上一个。

为了提供更多细节,这是我遵循的路径A->B->当我到达C时,我希望B关闭。

除了这里的其他答案外,您还可以使用

navigationController.viewControllers.remove(at: 1)

编辑:

您可以使用UINavigationController来控制ViewControllers的堆栈。

let viewControllerA = UIViewController()
let viewControllerB = UIViewController()
let viewControllerC = UIViewController()
let navigationController = UINavigationController(rootViewController: viewControllerA)
navigationController.pushViewController(viewControllerB, animated: true)
navigationController.pushViewController(viewControllerC, animated: true)
// Remove B
navigationController.viewControllers.remove(at: 1)

这在一定程度上取决于您的导航方式。如果使用导航控制器,则可以访问视图控制器阵列并直接对其进行操作。例如,

navigationController.viewControllers.popLast() //removes the last view controller and gives you a reference to it if you need.

如果您正在使用segues,您可以在转到C.之前返回viewController A

您也可以使用它以其他方式操作viewController堆栈。

您也可以要求视图控制器使用self.disse(animated:true(自行关闭。

如果你感兴趣,我发现Coordinator Pattern是解决许多导航问题的一个非常好的方法,那就是iOS。

如果你想发布一些代码,我可以帮你仔细看看。

您可以使用UIViewController的presentaingViewController属性来访问呈现此VC的VC。这样,您可以忽略以前的VC。

/// lets present vc2 from vc 1
let vc1 = UIViewController()
let vc2 = UIViewController()
vc1.present(vc2, animated: true)

/// presentingViewController of vc2 will be vc1, and it will dismiss if presented modally.
vc2.presentingViewController?.dismiss(animated: true)

如果您使用导航控制器:

extension UINavigationController {
func replaceCurrentVC(with vc: UIViewController, animated: Bool) {
var allVC = viewControllers
allVC[allVC.count - 1] = vc
setViewControllers(allVC, animated: animated)
}
}

最新更新