gpt4 book ai didi

ios - 如何正确关闭先前的 View Controller

转载 作者:行者123 更新时间:2023-12-01 23:49:43 25 4
gpt4 key购买 nike

抱歉,我知道有一些类似的问题,但我已经找了两周时间,通过我能找到的每个问题,但无法弄清楚(我有点新手)。

我有一些不同的 View Controller ,没有使用导航 Controller 。我可以在它们之间进行转换,没有问题。问题是,当我转向新的 View 时,我需要忽略每个 View 。以下是我迄今为止尝试过的一些方法。

选项 1(在新的 View Controller 中)

override func viewDidAppear(_ animated: Bool) {
presentingViewController?.dismiss(animated: false, completion: nil)
}

选项 2(在旧 View Controller 中)

override func viewDidDisappear(_ animated: Bool) {
self.dismiss(animated: false, completion: nil)
}

在这两种情况下,新 View 都会被忽略,我会返回到旧 View 。我已经尝试过大约 20 个版本的类似代码。

我是否应该使用程序中的第一个 VC 作为我的“主” View Controller ,并在其之上呈现/忽略所有其他 VC?当最初加载应用程序后不经常使用“主”VC 时,我认为这种方法似乎内存效率不高。

我似乎遗漏或不理解某些东西。任何帮助将不胜感激。

最佳答案

这样想: View Controller 不能存在于岛屿上。它必须呈现在某些东西之上。

这意味着当您在另一个 VC 之上呈现一个 VC 时,呈现的 View Controller 是您刚刚呈现的新 View Controller 的“基础”。

如果您不想将 VC 相互叠加,您有以下几种选择:

1) 使用导航 Controller 。这可能是最好的方法。您可以呈现或推送任何 View Controller 。如果您决定推送,您可以从导航堆栈中删除旧的,也可以将其保留在那里,以便用户可以返回。使用导航 Controller 的方法有很多,而且它无疑是在 Controller 之间导航的最灵活的方法。

2) 使用标签栏 Controller 。如果您的应用程序中只有几个不同的 View Controller ,则此方法效果最佳,但它适用于某些用例。

3)完全按照您在帖子中所说的操作(使用 Root View Controller 来呈现/关闭所有其他 VC)。正如我所说,你不能凭空呈现一个 View Controller ——它背后总是有一些东西。除非您的根 VC 中发生了大量的事情,否则这不会导致任何内存问题。除非您对 View Controller 之间的动画非常挑剔,否则这种方法应该没问题。

一般来说,在内存使用成为问题之前我不会太担心它。对于 99% 的正常用例,将 View Controller 相互叠加应该没问题。

关于ios - 如何正确关闭先前的 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56960977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com