Как выполнить код только тогда, когда экран стал видимым путем изменения индекса панели вкладок, но теперь, когда другой представленный модальный экран закрывается на нем?

Итак, мое приложение представляет собой приложение с панелью вкладок, состоящее из 3 вкладок. Я хотел обновить экран третьей вкладки, когда он был выбран на панели вкладок. Для этого я переопределил viewWillAppear(..) и добавил туда свой код.

Но viewWillAppear(..) также вызывается при закрытии модального экрана на уже представленной третьей вкладке экрана или при выборе фотографии во время отображения экрана, а я этого не хочу.

Перенос моего собственного кода на viewDidLoad() также не работает, потому что viewDidLoad(..) вызывается только один раз. (как я уже сказал, я хочу обновлять вкладку каждый раз, когда она выбирается.

Я пробовал переместить свой код в специальный метод под названием initialise(), и этот метод должен сделать следующее:

override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
            ((self.viewControllers![2] as! UINavigationController).viewControllers[0] as! MyCustomViewController).initialise()

}

но это не удается, потому что элементы пользовательского интерфейса не загружаются к тому моменту, когда я вызываю initialise(), и происходит сбой.

Есть идеи, как этого можно достичь?

0
0
30
1

Ответы 1

Дайте контроллеру панели вкладок делегата и реализуйте этот метод: tabBarController(_:shouldSelect:)

https://developer.apple.com/documentation/uikit/uitabbarcontrollerdelegate/1621166-tabbarcontroller

Он вызывается только и именно тогда, когда вкладка изменяется путем выбора на панели вкладок.

К сожалению, это не работает, потому что вызов там метода «initialise ()» все равно приведет к тому, что на экране не будут загружены элементы пользовательского интерфейса, и произойдет тот же сбой, что и в приведенном выше примере.

Bogdan Razvan 11.04.2018 14:42

Другие вопросы по теме