У меня такая же ситуация, как и у вас, и я сделал это, используя протоколы для передачи данных обратно первому ViewController (в вашем случае, MainViewController), чтобы скрыть размытость.
Вот как я это сделал:
Это первый ViewController (MainViewController в вашем случае). Вы создаете и внедряете протокол и соответствуете его методам.
import UIKit
//here you can name your protocol and the function whatever you want and set the values you want to pass back, in our case a boolean
protocol esconderBlurProtocol {
func isEsconder(value: Bool)
}
//you have to extend the controller to your protocol and conform its methods, in this case the function isEsconder, and inside it you do whatever you want.
//In our case hide the blur if the value we are receiving is true
class PalestrantesVC: UIViewController,esconderBlurProtocol {
func isEsconder(value: Bool) {
if(value){
blur.isHidden = true
}
}
}
Теперь для вашего второго ViewController это довольно просто. Просто создайте переменную вашего типа протокола (в моем случае esconderBlurProtocol).
class DetalhePalestranteVC: UIViewController {
var delegate: esconderBlurProtocol?
И используйте его, вызывая его функцию, когда захотите (в нашем случае, когда мы закрываем этот ViewController), отправляя значение True обратно в наш предыдущий ViewController:
override func viewWillDisappear(_ animated: Bool) {
delegate?.isEsconder(value: true)
}
И чтобы закончить, вам нужно установить экземпляр вашего протокола на ваш первый ViewController, когда вы открываете второй ViewController, например так:
let viewController = (self.storyboard?.instantiateViewController(withIdentifier: "DetalhePalestranteVC")) as! DetalhePalestranteVC
viewController.modalPresentationStyle = .overFullScreen
viewController.delegate = self
self.present(viewController, animated: true, completion: nil)
Вот и все. Извините, если это не так, как английский, не мой основной язык.