【问题标题】:Close a viewcontroller after a segue在 segue 后关闭视图控制器
【发布时间】:2020-02-17 17:27:04
【问题描述】:

我想要的是在执行 segue 之后关闭 viewController,以便新视图上导航控制器的后退按钮不会返回到我刚刚关闭的视图,但它会转到视图在故事板中它位于它之前,就像它是第一次加载一样。

我已经尝试过dismiss 之类的东西,但它对我来说并没有真正起作用,因为它只会关闭我为执行该功能而按下的按钮所在的视图:

@objc func goToList(){
   self.dismiss(animated: true, completion: nil)
   performSegue(withIdentifier: "goToList", sender: nil)
}

【问题讨论】:

  • 我建议您查看有关 UINavigationController 的 Apple 文档:(developer.apple.com/documentation/uikit/uinavigationcontroller) 这应该包含您问题的答案。我会专门查看“主题”部分并查看有关“推送和弹出堆栈项”的文档。如果您能够在文档中搜索您的答案,那将更有价值!相信我!
  • 我没想过那样做,但无论如何它确实有效,所以谢谢!

标签: ios swift segue viewcontroller dismiss


【解决方案1】:

导航控制器维护已打开(推送)的 ViewController 的堆栈(数组)。它还能够将这些 ViewController 从堆栈中弹出,直到它到达特定的一个。

例如,如果您希望返回到先前的 MyInitialVC 类型的视图控制器,那么您可能希望在堆栈中搜索,直到找到该类型的 VC,然后弹出到它:

let targetVC = navigationController?.viewControllers.first(where: {$0 is MyInitialVC})
if let targetVC = targetVC {
   navigationController?.popToViewController(targetVC, animated: true)
}

注意。在没有 XCode 的情况下从内存编写,因此您可能需要更正一些小错别字

【讨论】:

    【解决方案2】:

    您可以使用unwind segue 来返回您想要的每个viewController
    在此处阅读更多信息:
    Unwind Segues Step-by-Step (and 4 Reasons to Use Them)

    【讨论】:

    • 也试过了,但不知道为什么当我控制+拖动视图控制器时,我无法将其链接到退出图标
    • 如果你想以编程方式调用它,你应该从顶部的 viewController 图标 ctrl+拖动退出图标,否则你应该从要退出的按钮 ctrl+拖动!当然,所有这些都需要您在第一个 viewController 中定义 unwind func,而不是最后一个!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-08
    • 2012-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-18
    相关资源
    最近更新 更多