繁体   English   中英

如何关闭除一个视图控制器以外的所有视图控制器并弹出到 Swift 中的指定视图 controller?

[英]How to dismiss all but one view controllers and pop to specified view controller in Swift?

我有一堆视图,然后是一个注销按钮,它将用户注销并将他们带到第一个视图 controller(登录/注册屏幕)。 我尝试使用模态演示来执行此操作,但它破坏了我的导航,并且我不能使用弹出到根视图 controller 因为它不是根视图 controller - 我至少有 2 个导航控制器深。 我将如何 go 以某种方式只显示第一个? 我基本上需要它来表现得好像应用程序刚刚重新启动一样。 unwind segues 会在某种程度上有所帮助吗? 谢谢,这就是我所说的弄乱导航的意思。 现在弹出以下视图控制器,而不是(下图来自实际第一次启动应用程序)它的外观

假设您使用UINavigationController ,您可以将UINavigationController.setViewControllers(_:animated:)方法与UINavigationController.viewControllers结合使用。 后者按照导航 controller 的确切顺序为您提供一系列视图控制器,而前者可用于更改导航堆栈。 例如,如果您只想保留导航堆栈中的前 3 个视图控制器:

guard let navigationController = self.navigationController else { return }
let viewControllersToKeep = navigationController.viewControllers.prefix(3)
navigationController.setViewControllers(viewControllersToKeep, animated: true)

注意:在这种情况下,由导航 controller 执行的 animation 通常(我相信总是,但不是 100% 肯定)是推动 animation 而不是流行的,这可能不是所需的。

所以如果你想让导航 controller 来执行 pop animation,那么你应该调用 pop 直到你到达想要的视图 controller,但关键是动画单个 pop。 对于与上述相同的示例:

guard let navigationController = self.navigationController else { return }
let numberOfPops = navigationController.viewControllers.count - 3
for i in 0..<numberOfPops {
    let animated = i == 0
    navigationController.popViewController(animated: animated)
}

希望这回答了关于弹出到所需视图 controller 的问题(您可以通过其类型检测您的视图 controller,然后您可以找到它的索引并使用上面的逻辑)。

如果要关闭到第一个呈现视图 controller,那么您需要在第一个呈现视图 Z594C103F2C6E04C30CAZAB059F031E 上调用UIViewController.dismiss(animated:completion:) dismiss方法的行为如下:

  1. 如果视图 controller 正在呈现视图 controller,那么它将关闭呈现的视图 controller;
  2. If the view controller is not presenting any view controller, but it is presented by another view controller (ie has a parent view controller), then it will ask the parent view controller to dismiss it;
  3. 如果以上都不是,它将什么都不做。

长话短说,您需要在要留在屏幕上的视图 controller 上调用驳回。

我基本上需要它来表现得好像应用程序刚刚重新启动一样。

在这种情况下,将登录/注册屏幕 controller 分配给UIWindow.rootViewController似乎是正确的选择。 此主题已在此处介绍: Swift ios 设置新的根视图 controller

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM