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

Swift 转换到上一个视图时显示模态,swift,uinavigationcontroller,modal-dialog,Swift,Uinavigationcontroller,Modal Dialog,当我离开某个视图控制器时,我希望它在导航堆栈中的上一个视图上显示一个模式视图。目前我正在使用以下代码执行此操作: override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) self.navigationController?.viewControllers.last?.present(myModalView, animated: false, completion:

当我离开某个视图控制器时,我希望它在导航堆栈中的上一个视图上显示一个模式视图。目前我正在使用以下代码执行此操作:

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    self.navigationController?.viewControllers.last?.present(myModalView, animated: false, completion: nil)
}
这似乎有效,但每次我离开视图时,控制台中都会出现警告:

不建议在分离的视图控制器上显示视图控制器。


所以我担心可能会有一个我还没有遇到的问题。是否有一种“正确”的方法来执行此操作?

您是在当前视图控制器上显示模式,而不是在上一个视图控制器上。当你这样做的时候

self.navigationController?.viewControllers.last?.present(myModalView, animated: false, completion: nil)
视图中将消失
协议中,这与

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)

事实证明,
self.present(myModalView,动画:false,完成:nil)
在没有警告的情况下完美地工作。回想起来,我可能应该先测试一下,但我认为它不会工作,因为视图正在消失


此外,它在
动画:true
中根本不起作用,而我的原始解决方案在没有警告的情况下起作用(但我不希望它被动画化)。不确定这是否就是异步进程的工作方式,或者它是否还有其他功能。

看起来它会做完全相同的事情。它在视图控制器的导航控制器列表中找到当前视图控制器的索引,然后从列表中获取该视图控制器,并用它显示新视图。我认为情况并非如此,因为警告消息显示了正确的类名,并且在该功能期间导航堆栈将上一个视图控制器显示为
。last
。但无论如何,我在测试时偶然发现了这个解决方案,所以无论如何,谢谢;)@事实上你是对的,我的意思是从指数中减去1,谢谢!我的答案已经更新了。