我对UINavigationController
堆栈感到困惑。
我正在显示UIViewController("SubmitRequestViewController")
中的rootViewController("ViewController")
。
以下是我的代码:
let controller = SubmitRequestViewController.init(nibName: "SubmitRequestViewController", bundle: nil)
self.navigationController?.pushViewController(controller, animated: true)
现在我只是想从SubmitRequestViewController
回到rootViewController
。
//Home Button
@objc fileprivate func backHome() {
let _ = self.navigationController?.popToRootViewController(animated: true)
}
//Back Button
@objc fileprivate func backButton() {
let _ = self.navigationController?.popViewController(animated: true)
}
如果我再去我的" SubmitRequestViewController
"它接到两次电话。
所以这是持续的。如果我重复上述步骤,它会多次调用。
现在我得到的是: -
navigationController.viewControllers.count
正在不断增加。
我试图弹出navigationController
,但它仍然存在。
我也尝试了这个: -
self.navigationController?.dismiss(animated: true, completion: nil)
实际上我在DrawerViewController类中触发了一个通知: -
//Submit Request
else if itemArray[indexPath.row].contains("SUBMIT REQUEST") == true {
tableView.deselectRow(at: indexPath, animated: false)
self.dismiss(animated: true, completion: nil)
NotificationCenter.default.post(name: Notification.Name(rawValue : AssessNowKyes.submitRequest), object: nil)
}
我在我的ViewControllerClass中调用它: -
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(submitRequestClicked), name: Notification.Name(rawValue : AssessNowKyes.submitRequest), object: nil)
}
//Submit Request Clicked
@objc fileprivate func submitRequestClicked() {
let controller = SubmitRequestViewController.init(nibName: "SubmitRequestViewController", bundle: nil)
self.navigationController?.pushViewController(controller, animated: true)
}
我正在做。我不知道我还要删除Observer吗?因为我也试过了。它没有用。
答案 0 :(得分:1)
检查你在哪里打电话。你是在ViewWillAppear
打电话吗?
如果是,这就错了。
let controller = SubmitRequestViewController.init(nibName: "SubmitRequestViewController", bundle: nil)
self.navigationController?.pushViewController(controller, animated: true)
答案 1 :(得分:1)
我不能再出现这个问题了。
我猜你必须两次发动推动动作。
viewDidLoad
上的SubmitRequestViewController
添加断点,以检查viewDidLoad
是否被调用了两次