【问题标题】:Dismiss all none current views关闭所有无当前视图
【发布时间】:2016-11-24 13:29:01
【问题描述】:

我一直在关注一个视频教程,该教程教我以编程方式创建没有故事板的 iOS 应用程序。

进展顺利,我喜欢它的大部分内容,但是我有一个小问题。

我只完成了一半,我注意到内存存在潜在问题,本教程向我展示的方式是,对于每个下一个视图,我都会这样呈现:

let ChooseCategoryController = ChooseCategoryViewController()
present(ChooseCategoryController, animated: true, completion: nil)

然后我从那里的视图中呈现另一个。回到过去,我也提出了另一种观点。我注意到在运行应用程序时内存使用量不断增加。

有没有一种方法,当我呈现一个新视图时,我可以检测哪些视图是打开的并关闭所有其他的?

我想也许在完成部分有什么东西,但我很挣扎,因为我还很新。

提前致谢。

更新1

在尝试以下解决方案并添加 self.正如 xcode 要求我有这个代码:

 dismiss(animated: false, completion: {
        self.present(DisplayQuestionsViewController(), animated: true, completion: nil)
    })

我收到此警告:

警告:尝试在 上显示 ,其视图不在窗口层次结构中!

如果它是相关的。此代码在单击 ChooseCategoryViewController() 上的 UICollectionView 单元格时触发

更新 2:

我现在已将代码更改为以下内容:

dismiss(animated: false, completion: {
        self.parent?.present(DisplayQuestionsViewController(), animated: true, completion: nil)
    })

正如下面的海报所述。当前视图控制器现在确实会关闭,但它不会加载新的视图控制器。

【问题讨论】:

    标签: ios swift viewcontroller presentviewcontroller


    【解决方案1】:

    您可以,但您必须遍历windows 中的所有viewControllers 并将其删除。我会说这是危险的,真的不推荐。

    相反,我喜欢建议这一点。你 dismiss 你的旧控制器,同时 present 一个新控制器。

    dismiss(animated: false, completion: {
        self.parent?.present(MyOtherViewController(), animated: true, completion: nil
    })
    

    上面的代码使用completion块来保证当当前的ViewController被解除时,它立即present下一个MyOtherViewController在这种情况下。

    【讨论】:

    • 谢谢,我只需要弹出。我会尝试一下并发布结果。如果所有作品我会接受:)
    • 嗨,我更新了帖子。应该使用parentViewController 而不是呈现新的ViewController,因为当前的dismiss。这也是警告试图告诉你的。
    • 最终有多种方式可以显示不同的视图控制器。也许你也想看看 UINavigationController。这样,您就可以像大多数应用程序一样使用pushpop
    • 您的更新也没有任何作用。它只是关闭当前视图但不加载第二个视图:/有什么想法吗?感谢您的帮助
    • 嘿@JamesG dismiss 仅在您的ViewControllerpresent 时才有效。当它是windowrootViewController 时,它不起作用。我需要更好地了解您的视图层次结构才能为您提供帮助。也许这个链接会让你更好地理解:code.tutsplus.com/tutorials/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-10
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多