我们有 Router 类将 viewController 导航到另一个 View Controller ,它按预期工作,但随机时 viewControllersStack 为零并发生崩溃。我们尝试使用“if let”来避免崩溃,但这里的问题是当 viewControllersStack 为零时出现黑屏。所以我们已经把它恢复了。你能否建议为什么导航堆栈为零,如果导航为零如何处理?
private func PopOrPushToViewController(_ strControllerClass: String) {
//get the list of controllers in the stack
let viewControllersStack: [UIViewController] = self.navigationController!.viewControllers as [UIViewController]
var boolDidNaviagtion = false
for viewController in viewControllersStack {
if boolDidNaviagtion {
viewController.removeFromParent()
}
if String(describing: type(of: viewController)) == strControllerClass {
boolDidNaviagtion = true
self.navigationController?.popToViewController(viewController, animated: true)
}
}
if !boolDidNaviagtion {
let viewController = NavigationController.sharedInstance.storyboardViewControllerFromString(strControllerClass)!
self.navigationController!.pushViewController(viewController, animated: true)
}
}
class AddTripViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBAction func navigate(_ sender: Any) {
popOrPushToViewController( "ListViewController")
}
}
最佳答案
问题可能是您使用:
viewController.removeFromParent()
如果您弹出
堆栈中的某个 VC,其他 VC 将自动删除。
尝试将您的功能更改为:
private func PopOrPushToViewController(_ strControllerClass: String) {
// get the list of controllers in the stack
if let vcStack: [UIViewController] = self.navigationController?.viewControllers {
var didPop = false
for vc in vcStack {
// if we find the desired VC already in the navVC's stack of controllers,
// pop to it, set the didPop flag to true, and quit looking
if String(describing: type(of: vc)) == strControllerClass {
self.navigationController?.popToViewController(vc, animated: true)
didPop = true
break
}
}
// if we did NOT pop to the desired VC,
// instantiate it and push it onto the stack
if !didPop {
if let vc = NavigationController.sharedInstance.storyboardViewControllerFromString(strControllerClass) {
navigationController?.pushViewController(vc, animated: true)
}
}
}
}
关于ios - 尝试导航到另一个 View Controller 时,快速导航 Controller 返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59611404/