iOS Swift - 关闭导航控制器的根视图控制器

3

我从我的主视图控制器的按钮点击中打开了一个导航控制器。

我以编程方式在导航控制器上创建了一个左侧栏按钮,我想使用它来关闭导航控制器并返回到我的主控制器。

本质上,我正在返回导航控制器的根视图控制器。

我已经尝试过:

navigationController?.dismissViewControllerAnimated(true, completion: nil)

并且

self.dismissViewControllerAnimated(true, completion: nil)

两个都会出现NSException异常。

请给予建议。


你得到了什么 NSException? - matt
你是在推送还是展示 UIViewController - Sohil R. Memon
也许你正在直接在 rootViewController 上调用这些方法。顺便问一下,你得到了什么异常? - Suryakant Sharma
更像是使用解开(segue)的用例:https://dev59.com/SGcs5IYBdhLWcg3w0HIa - Christian Dietrich
未识别的选择器发送到实例0x154da4960 2016-03-17 19:16:29.363 [605:192637] ***由于未捕获的异常 'NSInvalidArgumentException' 而终止应用程序,原因:'-[ back:]: 未识别的选择器发送到实例0x154da4960' - Walking
这个问题是如何解决的 @Walking - Krutika Sonawala
6个回答

9

Swift 3:

self.view.window!.rootViewController?.dismiss(animated: false, completion: nil)

它将关闭所有已呈现的视图控制器并保留根视图控制器。

4

如果您正在“推”您的ViewController,那么您应该使用pop将该ViewControllerNavigation堆栈中移除,并落在之前的ViewController上。 请尝试以下方法...

self.navigationController?.popViewControllerAnimated(true);

SWIFT 3

_ = navigationController?.popViewController(animated: true);

0

Apple Dev已经提供了非常简单的代码,即

self.navigationController?.popToRootViewController(animated: false)

0
self.presentingViewController?.presentingViewController?.dismissViewControllerAnimated(true, completion: nil)

尝试这个 :)

0

dismissViewController函数用于在使用presentViewController显示视图控制器时,关闭可能是导航栈的根视图控制器或独立视图控制器。


0
一年后... 异常表明您在添加左侧栏按钮时提供给操作参数的选择器存在问题。
类似这样的代码应该可以解决问题:
创建栏按钮项:
let backBarButton = UIBarButtonItem.init(barButtonSystemItem: UIBarButtonSystemItem.stop, target: self, action: #selector(dismissView))

关闭根视图控制器:

func dismissView() {
    self.dismiss(animated: true, completion: nil)
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接