gpt4 book ai didi

ios - 在 Swift 中同时取消两个 ViewController

转载 作者:行者123 更新时间:2023-11-28 05:57:32 25 4
gpt4 key购买 nike

我有两个 UIViewController。第一个是欢迎屏幕,第二个是登录屏幕(在导航 Controller 内)。用户可以使用后退按钮从登录屏幕返回到欢迎屏幕,这样登录屏幕将以 self.present(LoginViewController(),animated: false) 打开,在登录屏幕之后,最终 UIViewControllerappDelegate.window?.rootViewController = FinalViewController() 打开。

我的问题是在这种情况下 LoginViewControllerWelcomeViewController 都没有 deinit。但是,如果我;

  • 直接从 WelcomeViewController 打开 FinalViewController(通过更改 RootViewController),而不显示 LoginViewController
  • 在不显示 WelcomeViewController 的情况下打开 LoginViewController 然后打开 FinalViewController(再次更改 RootViewController)

Controller 已取消。所以我不认为任何 viewcontroller 有保留周期 vs..

我想在打开最终 Controller 后取消登录和欢迎屏幕。

编辑:我发现将它放在 NavigationController 中会阻止拒绝。

EDIT2: 如果我在更改 rootViewController 之前调用 self.dismiss(animated: false, completion: nil)。所有 Controller 似乎都被取消了,但我不确定这是否是一个更好的答案。 enter image description here

最佳答案

你为什么不使用这个层次结构:

-UIWindow
-----UIWindow.RootViewController
----------UINavigationController
---------------WelcomeScreen
---------------LoginScreen (Push without animation)

登录成功:

-UIWindow
-----UIWindow.RootViewController
----------UINavigationController
---------------FinalViewController

隐藏导航栏并根据需要使用animated属性。

编辑

来自 document 的一部分:

viewControllerToPresent

The view controller to display over the current view controller’s content.

因此可以从当前 Controller 访问父 Controller 的引用,因此两个 VC 可以相互访问。例如,self.presentedViewController。为了删除它,必须解雇 Controller 。所以 presented controller 会释放 presenter controller 的引用。

关于ios - 在 Swift 中同时取消两个 ViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51023329/

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