连接到导航控制器时如何将 ViewController 弹出到根目录

Posted

技术标签:

【中文标题】连接到导航控制器时如何将 ViewController 弹出到根目录【英文标题】:How to pop ViewController to root when connected to navigation controller 【发布时间】:2019-01-31 07:08:05 【问题描述】:

我试图从连接到navigationController 的视图控制器调用popToRootViewController 函数。当我删除navigationController 时,我可以访问我的RootViewController。但是如果有一个导航控制器连接到(我的情况:TableViewController)ViewControllerpopToRootViewController 将以 navigationController 结尾

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
    if indexPath.section == 2 && indexPath.row == 0 
        Utilities.shared.clearTokens()
        navigationController?.popToRootViewController(animated: false)
    

【问题讨论】:

【参考方案1】:

据我了解,当用户单击注销时,您希望弹出到根视图控制器,您应该更改应用根控制器,您可以这样做

let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let newViewController = let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let rootViewController = storyBoard.instantiateViewController(withIdentifier:"your identifier")
let appdelegate = UIApplication.shared.delegate as! AppDelegate
appdelegate.window!.rootViewController = rootViewController

因为navigationController?.popToRootViewController(animated: false) 将弹出到您当前导航堆栈上的根控制器

【讨论】:

我应该在哪里写这个。在 appDelegate 中? 在 didSelectRowAt 中替换这个 navigationController?.popToRootViewController(animated: false) 添加这一行时我得到了相同的结果。我们可以实现这个逻辑吗?navigationController.navigationController?.popToRootViewController(animated: false)(弹出直到没有导航控制器) 是的,你可以,但这不是我认为的最佳做法

以上是关于连接到导航控制器时如何将 ViewController 弹出到根目录的主要内容,如果未能解决你的问题,请参考以下文章

如何创建导航控制器以将主视图控制器连接到 2 个自定义视图控制器

IOS如何将一个数组连接到另一个视图控制器

在不同的视图控制器中更改另一个视图的出口

将 UILabel 连接到 IBOutlet 会导致崩溃

将 UITableView 连接到 Firebase 结果

如何将导航控制器添加到 xib