【问题标题】:Hide modal view controller without dismiss (change position)隐藏模态视图控制器而不关闭(更改位置)
【发布时间】:2017-07-13 07:08:27
【问题描述】:

我在模态控制器中有一些任务,我需要当你打开另一个对象时,只替换控制器中的一些元素。我找到了以下示例In iOS, how to drag down to dismiss a modal?,一切正常,但我需要确保当我关闭控制器时隐藏并且不触发事件deinit。我想要两个事件:dismiss 和 hide。

【问题讨论】:

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

标签: ios


【解决方案1】:

你应该做的是保留 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 存在于您的 subViewController 的内存引用中,它就不会被取消初始化/解除分配

如果您想完全删除引用,请执行此操作。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-01
    相关资源
    最近更新 更多