swift 如何从另一个视图控制器中消除前一个视图控制器或所需的控制器?

ckocjqey  于 2022-10-31  发布在  Swift
关注(0)|答案(4)|浏览(425)

我想消除当前不在顶部的视图控制器。
我展示了一个视图控制器,当我展示它时,我希望关闭前一个。
更详细地给予,这是当我到达C时,我想要B闭合的路径A → B → C。

lf3rwulv

lf3rwulv1#

除了这里的其他答案你还可以用

navigationController.viewControllers.remove(at: 1)

编辑:
您可以使用UINavigationController来控制ViewController的堆栈。

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)
ars1skjm

ars1skjm2#

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

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

如果您使用segues,则可以在移至C之前,先回到viewController A。
您也可以使用这个以其他方式操作viewController堆栈。
您也可以要求视图控制器使用self.dismiss(动画:真)。
如果你感兴趣,我发现协调器模式是一个很好的方法来解决很多导航问题是iOS。
如果你想发布一些代码,我可以为你仔细看看。

to94eoyn

to94eoyn3#

您可以使用UIViewController的presentingViewController属性来访问呈现此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)
yrefmtwq

yrefmtwq4#

如果使用导航控制器:

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

相关问题