Ios 隐藏模式视图控制器而不关闭(更改位置)

Ios 隐藏模式视图控制器而不关闭(更改位置),ios,Ios,我在模态控制器中有一些任务,我需要在打开另一个对象时,只替换控制器中的一些元素。我发现下面的例子,一切正常,但我需要确保当我关闭控制器时隐藏并不会触发事件deinit。我希望有两个事件:dismise和hide。您应该做的是保留viewController的内存引用 例如: class ParentViewController: UIViewController { // place this here to keep it in ParentViewController's memor

我在模态控制器中有一些任务,我需要在打开另一个对象时,只替换控制器中的一些元素。我发现下面的例子,一切正常,但我需要确保当我关闭控制器时隐藏并不会触发事件deinit。我希望有两个事件:dismise和hide。

您应该做的是保留viewController的内存引用

例如:

class ParentViewController: UIViewController {
    // place this here to keep it in ParentViewController's memory
    var subViewController: SubViewController?

    override func viewDidLoad() {
        super.viewDidLoad()

        // initialize the subViewController and set it as the attribute
        self.subViewController = SubViewController()
    }

    func showSub() {
        if let unwrappedSubViewController = self.subViewController {
            self.present(unwrappedSubViewController, animated: true, completion: nil)
        }
    }

    func dismissSub() {
        self.subViewController?.dismiss(animated: true, completion: nil)
    }

}

class SubViewController: UIViewController {
    .. some properties here
}
只要您的ParentViewController存在,您的
子ViewController的内存引用就存在,因此它不会被取消分配/释放

如果要完全删除引用,只需执行此操作

// use optional binding for safety
self.subViewController?.dismiss(animated: true) { [weak self]
    self?.subViewController = nil
}

模态视图控制器就是:模态。这意味着,当它被呈现时,用户不应该能够与它下面的任何东西进行交互。您的问题不清楚您为什么要隐藏它,但最好的做法可能是保存它的状态,将其关闭,并在需要时再次显示。@Nicolas Miari感谢您的回答,我需要访问模式视图而不预加载数据,模式窗口,如Deezer应用程序或Apple Music。对不起,我不熟悉这些应用程序,所以我仍然不明白你想要实现什么。请编辑您的问题并逐步解释UI流程,不要对我们知道的内容进行假设(我们对您的应用程序或其数据模型一无所知)。@SashaVasilev您可以重复使用ViewController,而不是每次创建一个新的ViewController。此外,如果你觉得推一个ViewController而不是模型更舒服,你可以这样做,并自定义segue,使其表现得像一个模型。我认为你只需要保存ViewController的内存引用,然后重新显示它。只要存在内存引用,即使您将其关闭,它也不会解除分配