How to pass data in UITabBarViewController
Итак, у нас есть TabBarVC с несколькими VC (к которым еще идут и NavigationControllers). Как же корректно передать данные внутри TabBarVC, чтобы при загрузки экранов все данные уже были на месте.
Приступим!
У каждого VC создаем свойство нашей модели (которую хотим передавать):
var persons: [Person]!
Это неявно извлеченный опционал (мы его обязательно инициализируем после загрузки экрана).
Затем в UITabBarViewController создаем метод, который будет инициализировать выше указанное свойство у каждого VC:
private func setupViewControllers() {
guard let viewControllers = viewControllers else { return }
let persons = Person.getPersons()
for viewController in viewControllers {
if let navigationVC = viewController as? UINavigationController {
if let personsListVC = navigationVC.topViewController as?
PersonsListViewController {
personsListVC.persons = persons
} else if let detailPersonsListVC = navigationVC.topViewController as? DetailPersonsListViewController {
detailPersonsListVC.persons = persons
}
}
}
}
И вызываем этот метод во viewDidLoad нашего TabBarViewController:
override func viewDidLoad() {
super.viewDidLoad()
setupViewControllers()
}
Итак:
- TabBar имеет массив VC, извлекаем его в свойство viewControllers
- Получаем данные из модели
- Затем перебираем массив VC
- И так как каждый VC лежит в NavigationController, то добираемся сначала до него, а затем кастим до нужного VC
- У каждого VC инициализируем наше свойство