Как запустить код в вашем главном контроллере представления в быстром, когда всплывающее окно закрывается - PullRequest
0 голосов
/ 09 мая 2018

Я сейчас пишу свое первое быстрое приложение. В настоящее время существует один контроллер вида / представления, который загружается при запуске приложения, а также всплывающее окно, привязанное к отдельному контроллеру вида (например, так: https://www.youtube.com/watch?v=S5i8n_bqblE). Когда я закрываю всплывающее окно, я хочу обновить несколько вещи в моем исходном представлении и запустить некоторый код. Однако, ни func viewDidLoad (), ни func viewDidAppear (), кажется, не работают. И я ничего не могу сделать из всплывающего представления, так как у меня нет доступа к компонентам в из него основной вид-контроллер. Что мне делать?

Всплывающее окно "представлено модально", если это имеет значение?

1 Ответ

0 голосов
/ 10 мая 2018

Я предполагаю, что у вас есть MainViewController, из которого вы представляете PopupVC. Вы можете использовать шаблон делегата здесь.
Определите PopupVCDelegate следующим образом

protocol PopupVCDelegate {
    func popupDidDisappear()
}

В вашем PopupVC определите свойство delegate типа PopupVCDelegate. А в методе closePopup вызовите метод делегата popupDidDisappear

class PopupVC: UIViewController {
    public var delegate: PopupVCDelegate?

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func closePopup(_ sender: Any) {
        dismiss(animated: true, completion: nil)
        delegate?.popupDidDisappear()
    }
}

Теперь любой класс, который принимает этот delegate, сможет получить обратный вызов при вызове closePopup. Так что заставьте свой MainViewController принять этот делегат.

class MainViewController: UIViewController, PopupVCDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    func showPopup() {
        let popupViewController = //Instantiate your popup view controller
        popupViewController.delegate = self
        //present your popup
    }

    func popupDidDisappear() {
        //This method will be called when the popup is closed
    }
}

Другой способ - запустить уведомление через NSNotificationCenter на closePopup и добавить наблюдателя в MainViewController для прослушивания этого уведомления. Но это не рекомендуется в этом сценарии.

Редактировать

Как вы и просили указать метод NSNotificationCenter. Пожалуйста, измените ваши классы следующим образом

class PopupVC: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func closePopup(_ sender: Any) {
        dismiss(animated: true, completion: nil)

        NotificationCenter.default.post(name: NSNotification.Name("notificationClosedPopup"), object: nil)
    }
}  
class MainViewController: UIViewController, PopupVCDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

        NotificationCenter.default.addObserver(self, selector: #selector(onPopupClosed), name: NSNotification.Name(rawValue: "notificationClosedPopup"), object: nil)
    }

    @objc func onPopupClosed() {
        //This method will be called when the popup is closed
    }

    deinit {
        NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue: "notificationClosedPopup"), object: nil)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...