вызовите func в родительском UIViewController из последнего модального UINavigatonController UIViewController - PullRequest
0 голосов
/ 08 февраля 2019

я представляю модель UINavigationController примерно так:

let flowLayout = UICollectionViewFlowLayout()
let firstViewController = FirstViewController(collectionViewLayout:flowLayout)
let navigationController = UINavigationController(rootViewController: firstViewController)
navigationController.modalPresentationStyle = .fullScreen
present(navigationController, animated: true, completion: nil)

этот NavigationController будет содержать два UIViewController, в последнем, когда я увольняю NavigationController, я хочу вызвать функцию в моем главном контроллере, прежде чем уволить

Я знаю, как это сделать с помощью протоколов и делегатов, но только если я использую только два UIViewController, а не UIViewController и UINavigationController.

вроде так

protocol SecondViewControllerDelegate {
    func someFunction()
}

class SecondViewController: UIViewController {

    var delegate: SecondViewControllerDelegate?

    @objc func myRightSideBarButtonItemTapped(_ sender:UIBarButtonItem!)
    {

        self.delegate?.someFunction()
    }
}

у меня естьсоздать CustomNavigationController или есть какой-либо другой способ, например, передача делегата через все ViewController

1 Ответ

0 голосов
/ 08 февраля 2019

Вы можете написать что-то вроде:

let flowLayout = UICollectionViewFlowLayout()
let firstViewController = FirstViewController(collectionViewLayout: flowLayout)
firstViewController.delegate = self
let navigationController = UINavigationController(rootViewController: firstViewController)
navigationController.modalPresentationStyle = .fullScreen
present(navigationController, animated: true, completion: nil)

или использовать обратный вызов вместо делегата:

class FViewController: UIViewController {
    var onButtonAction: (() -> Void)?

    @IBAction onButtonTapped(_ sender: Any) {
      onButtonAction?()
    }
}

class SViewController: UIViewController {

    func someMethod() {
      let fVC = FViewController()
      fVC.onButtonAction = {}
      let navigationController = UINavigationController(rootViewController: fVC)
      present(navigationController, animated: true, completion: nil)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...