我正在尝试使用以下代码弹出到根视图控制器:
self.navigationController!.popToRootViewController(animated: true)
这通常有效,但在当前视图是模态时尝试使用此代码时出错。在这种情况下,如何弹回到根视图控制器?
提前致谢。
答案 0 :(得分:21)
您可以检查当前控制器是否已显示,如果已显示,则将其关闭,然后转到rootViewController
,直接转到rootViewController
if self.presentingViewController != nil {
self.dismiss(animated: false, completion: {
self.navigationController!.popToRootViewController(animated: true)
})
}
else {
self.navigationController!.popToRootViewController(animated: true)
}
答案 1 :(得分:8)
假设您的模态视图与以下ViewController关联。
首先要隐藏显示为模态的视图,您可以使用ViewController实例中的dismiss(animated: Bool)
方法。
对于以 Pushed 呈现的视图,您可以在navigationController属性中使用这些方法,例如:popToRootViewController(animated: Bool)
,popViewController(animated:Bool)
class ModalViewController: UIViewController {
@IBAction func backButtonTouched(_ sender: AnyObject) {
let navigationController = self.presentingViewController as? UINavigationController
self.dismiss(animated: true) {
let _ = navigationController?.popToRootViewController(animated: true)
}
}
}
答案 2 :(得分:4)
您已经展示了一个ViewController,因此您需要将其解除。
要在swift中关闭ViewController,请使用:
self.dismiss(animated: true, completion: nil)
答案 3 :(得分:0)
您可以这样做:
<强> 目标C: 强>
[(UINavigationController *)self.presentingViewController popToRootViewControllerAnimated:NO];
[self dismissViewControllerAnimated:YES completion:nil];
请在此处查看答案以供参考:
ios: how to dismiss a modal view controller and then pop a pushed view controller
答案 4 :(得分:0)
如何使用通知?
你的模态只发布通知
然后您的NavigationController接收,弹出到rootViewController
答案 5 :(得分:0)
如果您不希望动画发生,即希望用户在关闭模态视图后看到根视图控制器:
CATransaction.begin()
CATransaction.setCompletionBlock {
self.dismiss(animated: true, completion: nil)
}
self.navigationController?.popViewController(animated: false)
CATransaction.commit()
引用自:Completion block for popViewController
以上内容适用于弹出单个视图控制器。如果您需要弹出多个,popToRootViewController
将不起作用(由于动画而导致通话不平衡)。
在这种情况下,请使用以下(手动)方法将其删除:
guard let navigationController = self.navigationController else { return }
var navigationViewControllers = navigationController.viewControllers
navigationViewControllers.removeLast(navigationViewControllers.count - 1)
self.navigationController?.viewControllers = navigationViewControllers