我一直在使用模态视图控制器一段时间但是我想知道是否有一个函数要调用让底层视图控制器知道已经覆盖它的模态视图控制器已被解除。 如果可能,那么如何在视图控制器中告知模态视图已被解除,以便例如另一个模态视图控制器可以在旧模块被解除后立即打开吗? 提前致谢
答案 0 :(得分:8)
这可以使用委托轻松完成。
在模态视图控制器类(正在呈现的视图控制器)中创建协议。
protocol ModalViewControllerDelegate:class {
func dismissed()
}
同时创建一个委托属性,并在取消模式视图控制器时调用委托方法,比如点击一个按钮。这里有一些代码可以帮助您。
class ModalViewController1: UIViewController {
var delegate:ModalViewControllerDelegate?
@IBAction func back(_ sender: Any) {
delegate?.dismissed()
}
}
现在,在呈现视图控制器中准备segue方法,使呈现视图控制器成为所呈现的模态视图控制器的委托。这是一些代码。
import UIKit
class ViewController: UIViewController {
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "modal1" {
if let modalVC1 = segue.destination as? ModalViewController1 {
modalVC1.delegate = self
}
}
}
}
extension ViewController: ModalViewControllerDelegate {
func dismissed() {
dismiss(animated: true, completion: nil)//dismiss the presented view controller
//do whatever you want after it is dismissed
//like opening another modal view controller
}
}
在点击模态视图控制器的后退按钮后将调用被解除的功能,您可以关闭所呈现的视图控制器,并在此之后继续执行您想要执行的任何操作。