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