我是否可以将导航控制器堆栈中的特定ViewController放到前面,而不重新加载它或先关闭其他任何一个?很像popToViewController
,但没有删除顶部的
通常从viewControllers
中移除并再次推送
let nav = UINavigationController(rootViewController: UIViewController())
if nav.viewControllers.count > 1 {
let last = nav.viewControllers.removeLast()
nav.pushViewController(last, animated: true)
}
您可以使用self.navigationController?.viewControllers
获取所有导航堆栈控制器并根据需要更改位置。
在这个例子中,首先我从导航堆栈中找到Controller,然后最后移动。
if let navigationController = self.navigationController,
let indexForController = navigationController.viewControllers.firstIndex(where: {$0 is YourControllerName}) {
let removedController = self.navigationController?.viewControllers.remove(at: indexForController)
self.navigationController?.viewControllers.append(removedController!)
}