Можно ли установить свойство координатора на UITabBarController? - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь реализовать выдвижное меню в моем приложении на основе вкладок. У меня есть контроллер контейнера, который содержит MenuViewController и UITabBarController, и он соответствует протоколу MasterDelegate, который говорит контейнеру выдвигать MenuViewController при нажатии кнопки гамбургера, расположенной на отдельной вкладке. Моя проблема заключается в том, что свойство координатора для UITabBarController не устанавливается до тех пор, пока не будет настроен UITabBarController, и, таким образом, свойство в UITabBarController, а также в ViewController для вкладки, содержащей кнопку, всегда равно nil.

Здесь код, принадлежащий контейнеру, который устанавливает UITabBarController:

func configureHomeController() {

    centerController = MainTabBarController()

    // Make sure to set delegate of homeController
    centerController.masterDelegate = self

    print("MainContainterController: Setting the MainTabBarController delegate")

    if centerController.masterDelegate != nil {
    print("MainContainerController: MainTabBarController Delegate set")
    }

    view.addSubview(centerController.view)

    // Add the navigationController containing the HomeController as a child to the ContainerController
    addChild(centerController)

    // Home controller didMove to the parent container of self, which is the ContainerController
    centerController.didMove(toParent: self)
}

В TabBarController есть оператор печати, который выполняется после того, как настроен TabBarController, который сообщает мне, является ли свойство masterDelegate нулевым или нет. Это печатается прежде, чем контроллер контейнера напечатает два вышеупомянутых утверждения. Поскольку печатается 2-й оператор печати, я знаю, что координатор устанавливается, но он установлен слишком поздно.

Мой вопрос: как мне установить masterDelegate до того, как будет настроен UITabBarController? Или есть способ установить это свойство по факту?

1 Ответ

0 голосов
/ 31 марта 2020

Создайте удобный init для вашего tabbarcontroller и передайте ему делегата. Примерно так:

convenience init(masterDelegate: MasterDelegate) {
    self.init(nibName: nil, bundle: nil)

    self.masterDelegate = masterDelegate
}

когда вы настраиваете TabBarController, создайте его экземпляр следующим образом:

   centerController = MainTabBarController(masterDelegate: self)
   centerController.configure()

Кроме того, создайте функцию конфигурации в MainTabBarController. Там установите ваши viewControllers.

 (in MainTabBarController)
   func configure() {
       viewControllers = [viewController, viewController2, ....]
   }
...