ios - 更改 rootViewController 导致奇怪的行为

标签 ios swift swift3 uiwindow rootviewcontroller

我在我的应用中这样设置 rootViewController。

func setupMainView() {
    let rootViewContorller = window?.rootViewController

    if (rootViewContorller?.presentedViewController != nil || rootViewContorller?.presentingViewController != nil) {
        rootViewContorller?.dismiss(animated: false, completion: nil)
    }

    let tabbarController = UITabBarController()
    tabbarController.delegate = self

    let homeViewController = HomeViewController()
    let rewardsViewController = RewardsViewController()

    let homeNVc = UINavigationController()
    let rewardsNVc = UINavigationController()

    homeNVc.viewControllers = [homeViewController]
    rewardsNVc.viewControllers = [rewardsViewController]

    tabbarController.viewControllers = []

    tabbarController.viewControllers = [homeNVc, rewardsNVc]
    tabbarController.selectedIndex = 0

    self.window?.rootViewController = tabbarController
}

它工作正常。但是我必须在注册之后更改应用程序中的 rootViewController 等。之后当我转到 Debug View Hierarchy 时。我仍然在那里看到 registrationViewController。假设我将 rootViewController 更改 3-4 次,所有以前的 Controller 仍然存在。所以我的问题是如何在更改 rootViewController 之前从内存中删除所有 viewController。

最佳答案

您可以调用此函数,这将清除所有 View Controller 。

self.window?.rootViewController?.dismissViewControllerAnimated(false, completion: nil)

关于ios - 更改 rootViewController 导致奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44000906/

相关文章:

swift - 类型 'CGRect' 的值没有成员 'makeIntegralInPlace'

ios - 在 UIWebView 中全屏时如何拦截视频?

android - iOS 版 GCM 的优势?

ios - 从 TableView 返回时快速清空数组

ios - 将我的 iOS 应用程序检测为网络浏览器

swift - 来自 NSData 的 CString

ios - 如何设置 SKCameraNode 相对于节点的 x 和 y 位置?

c# - 如何使用 Xamarin 在 iOS 13 中获取设备 token ?

ios - 取消本地通知并安排新通知

swift3 - 无法使用 '[String : String]' 类型的索引为 'NSUserInterfaceItemIdentifier' 类型的值添加下标