Swift ios 重置视图控制器层次结构

Posted

技术标签:

【中文标题】Swift ios 重置视图控制器层次结构【英文标题】:Swift ios reset viewcontroller hierarchy 【发布时间】:2015-10-23 11:26:09 【问题描述】:

在故事板中,我的应用设计为:

导航 VC -> VC1

我正在尝试做的是继续使用另一个 VC,但重置菜单层次结构,以便我将旧 VC 堆叠在背景中

我想做的是:

导航 VC -> VC1 -> VC2 -> 导航已重置的新 VC

因此,当用户登录并进入帐户 VC/Page 时,导航堆栈应在点击帐户 VC/Page 时重置

这可能吗?

【问题讨论】:

基本上你不想将它添加到堆栈中?这就是你想要的吗? 您可以在堆栈中显示您不想在堆栈中拥有的视图控制器。但否则,有一个不再引导“返回”的后退按钮是个坏主意。 @OmkarGuhilot 是的。我想在新的 VC 上显示一个菜单按钮而不是一个“后退”按钮 @Animal Okey 我可以试试。我不想要后退按钮我想用新 VC 上的菜单按钮替换它 【参考方案1】:

如果您不想将视图控制器添加到导航控制器,则您导航到的每个视图控制器都可以将其设置为导航控制器的根视图控制器,并且不会将其添加到您的堆栈中。

let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
let yourViewController: ViewController = storyboard.instantiateViewControllerWithIdentifier("respectiveIdentifier") as! ViewController
let navigationController = self.view.window?.rootViewController as! UINavigationController
navigationController.setViewControllers([yourViewController], animated: true)

【讨论】:

在视图控制器中,如果您在单击该操作中的按钮时正在导航到下一个视图控制器。 它说VC没有名为“window”类的成员LoginViewController: UIViewController 检查编辑,如果你在 ViewController 中使用它,你需要访问 self.view.window 并且在应用程序委托中你需要作为 self.window 访问它 我能知道接受然后不接受并否决我的答案的原因 当前VC显示为模态是否有效?【参考方案2】:

我的解决方案和上面一样,但是少了一行

let yourViewControllerObejct = self.storyboard?.instantiateViewControllerWithIdentifier("YourViewControllerId") as? YourViewController

        let navigationController = self.view.window?.rootViewController as! UINavigationController
        navigationController.setViewControllers([yourViewControllerObejct!], animated: true)

【讨论】:

以上是关于Swift ios 重置视图控制器层次结构的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法重置整个视图控制器层次结构?

视图层次结构未准备好

iOS viewWillAppear 错误:“视图不在窗口层次结构中”

Swift 3 尝试呈现其视图不在窗口层次结构中

Swift,约束,视图层次结构没有为约束做好准备

iOS Swift - 使用可以取消的临时 UIView