如何获取呈现UINavigationController的UIViewController

时间:2016-05-05 13:57:47

标签: ios swift uinavigationcontroller

我有

NAVIGATIONController A -> ViewController A -> ViewController B
                                                  |
                                                  | (modal)
                                                  | 
                                                 \ /
                                                  '
                                         NAVIGATIONController B -> ViewController C

如何从C转回ViewController A?

当我在ViewController C中时,我尝试打印不同的控制器值:

print(self.navigationController) //NAVIGATIONController B
print(self.navigationController?.presentingViewController) //UINavigationController (not sure what this is? It is not one of my classes)
print(self.navigationController?.presentedViewController) //nil
print(self.presentingViewController) //The same UINavigationController (still not sure...)
print(self.presentedViewController) //nil

我知道如何从MyViewController C返回MyViewController B,使用此行self.navigationController?.dismissViewControllerAnimated(true, nil),但我要求从C转到A: - )

我怎样才能访问NAVIGATIONController B之前的内容?

3 个答案:

答案 0 :(得分:3)

来自UINavigationController的{​​{1}}应该是您的“NAVIGATIONController A”。

你应该可以从C做的是获得带有self.navigationController?.presentingViewController的“NAVIGATIONController A”并调用self.navigationController?.presentingViewController(做这个没有动画)。

然后使用popToRootViewController解除“ViewController C”(及其导航控制器)。

这样,当“ViewController C”被解除时,顶级导航控制器已经显示“ViewController A”。

答案 1 :(得分:0)

您可以使用popToViewController。

[self.navigationController popToViewController:yourviewcontroller animated:YES];

这将弹出viewcontrollers,直到它到达yourviewcontroller。 希望这会有所帮助。

答案 2 :(得分:0)

在BScene的viewDidLoad中:

override func viewDidLoad() {
    super.viewDidLoad()
    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.noti), name: "popAndDismiss", object: nil)
}
func noti() {
        navigationController?.popViewControllerAnimated(true)
    }

在CScene的buttonAction中:

@IBAction func click(sender: AnyObject) {
    NSNotificationCenter.defaultCenter().postNotificationName("popAndDismiss", object: nil, userInfo: nil)
    navigationController?.dismissViewControllerAnimated(true, completion: nil)
}