XLPagerTabStrip как передать данные между дочерними контроллерами?
Всем привет дорогие друзья. Я начинающий программист, нужна помощь. Я использую XlPagerTabStrip. У меня есть два дочерних контроллера child1 и child2 мне нужно передать некоторые данные из child2 в child1 и к тому же при этом программно перейти в child1 и отобразить полученные данные, как я могу это сделать ? В моем случае segue не подходит. Есть функция moveToViewController для перехода из одного дочернего контроллера в другой, но как мне передать данные?
Ответы (1 шт):
Как я уже указал в комментарии, для передачи данных между вью контроллерами можно использовать различные распространенные техники, по большому счету не зависящие от конкретных компонентов - делегирование, уведомления и тд
Конкретно для данной библиотеки вы можете переопределить в подклассе метод moveToViewController(at index: Int, animated: Bool = true) и обновлять данные в дочерних вью контроллерах по их индексу, используя предварительно сохраненные данные (например в UserDefaults)
class StripViewController: ButtonBarPagerTabStripViewController {
override func viewControllers(for pagerTabStripController: PagerTabStripViewController) -> [UIViewController] {
[ViewController1.initViewController(with: pagerTabStripController),
ViewController2.initViewController(with: pagerTabStripController)]
}
override func moveToViewController(at index: Int, animated: Bool = true) {
super.moveToViewController(at: index)
if (index == 0) {
let vc = viewControllers[index] as! ViewController1
// обновляем данные в vc
// vc.updateSomething()
}
}
}
Либо можно это делать в самих вью контроллерах, используя встроенные методы, например
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
updateSomething()
}
override func didMove(toParent parent: UIViewController?) {
if (parent == nil) {
return
}
updateSomething()
}
func updateSomething() {
// ...
}