代码之家  ›  专栏  ›  技术社区  ›  John Montgomery

转换到上一个视图时显示模式

  •  0
  • John Montgomery  · 技术社区  · 8 年前

    当我离开一个特定的视图控制器时,我想让它在导航堆栈中的前一个视图上显示一个模式视图。目前我正在使用此代码:

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        self.navigationController?.viewControllers.last?.present(myModalView, animated: false, completion: nil)
    }
    

    这个 似乎 要工作,但每次我离开视图时,控制台中都会出现警告:

    Presenting view controllers on detached view controllers is discouraged <Project.MyViewController: 0x7fe09281a400>.

    所以我担心可能有个问题我还没碰到。有没有“正确”的方法?

    2 回复  |  直到 8 年前
        1
  •  0
  •   John Montgomery    8 年前

    事实证明, self.present(myModalView, animated: false, completion: nil) 完美工作,无任何警告。回想起来,我可能应该先测试一下,但我假设它不会起作用,因为视图正在消失。

    另外,它 没有 与…一起工作 animated: true 而我原来的解决方案 做 没有警告(但我不希望它是动画)。不确定异步进程是否就是这样工作的,或者是否还有其他东西。

        2
  •  0
  •   user2876886    8 年前

    您将在当前视图控制器上呈现模式,而不是在以前的视图控制器上。当你这样做的时候

    self.navigationController?.viewControllers.last?.present(myModalView, animated: false, completion: nil)
    

    在 viewWillDisappear 协议,就跟说的一样

    self.present(myModalView, animated: false, completion: nil)
    

    相反,请尝试以下操作:

    let previousVCIndex = self.navigationController?.viewController.index(of: self)
    self.navigationViewController?.viewControllers[previousVCIndex! - 1]?.present(myModalView, animated: false, completion: nil)