如何从堆栈弹出视图控制器而不导航到它们

Ale*_*x S 2 ios swift

基本上,我有3个视图控制器,A,B和C.A和B都有一个后退按钮,当用户向后导航时,它会将顶视图控制器弹出堆栈.但是,一旦用户将其转到C,就没有选项可以倒退,我想在发生这种情况时将A和B从堆栈中弹出而不实际向后导航到A和B,因为这会导致其他地方的后退按钮出现问题应用程序,因为堆栈上有剩余的元素.你怎么建议这样做?

我不想尝试导航回弹出的视图控制器.

Mag*_*goo 6

您可以设置自己的viewControllers属性,navigationController如果您想为该过渡设置动画,也可以.

navigationController?.viewControllers = []

navigationController?.setViewControllers([], animated: true)

在你的例子中,当你到达C时,你就拥有了

navigationController?.viewControllers = [self]

一旦你到达C,它就会从堆栈中删除A和B ..你可能必须把它放进去,viewDidAppear但要确保你只做一次,除非你希望它每次C最终在屏幕上冲洗堆栈.

var initialLoad:Bool = true

override func viewDidLoad() {

    super.viewDidLoad()
}

override func viewDidAppear(animated: Bool) {

    super.viewDidAppear(animated)

    if initialLoad {
        initialLoad = false
        navigationController?.viewControllers = [self]
    }   
}
Run Code Online (Sandbox Code Playgroud)

或者,当您即将推送到C时,您可以尝试而不是 pushViewController

let cViewController = CViewController()
navigationController?.setViewControllers([cViewController], animated: true)
Run Code Online (Sandbox Code Playgroud)

而且我相信会推动你前进,然后从堆栈中移除A和B. 有时候取决于堆栈的当前状态,它会为pop提供动画