В настоящее время у меня есть контроллер вида, который при нажатии на вкладку с индексом 3 (вкладка «Карта») загружает контроллер вида, который содержит карту (карта А). ПРИМЕЧАНИЕ: он должен всегда загружать карту A при каждом нажатии вкладки карты. На главной вкладке имеется индекс с индексом 0, который при нажатии позволяет переключиться с карты A на карту B, а затем переместит вас на эту карту (этот переключатель выполняется вручную, поэтому для сохранения панели вкладок на экране используется selectedIndex панели вкладок, что означает, что viewWillAppear (), по-видимому, не вызывается). ПРИМЕЧАНИЕ. Для карты A и карты B используется один и тот же viewController, для определения того, какой из них загружать в viewWillAppear, используется bool. . Карта B, когда я снова нажимаю на вкладку «Карта» на панели вкладок, она автоматически загружает текущую карту, на которой я только что был (Карта B), но, как было сказано ранее, при нажатии на панели вкладок должна загружаться только карта A.
Это то, что я пытался, но после нажатия на вкладку карта все равно не будет отображаться:
class MainTabBarController: UITabBarController {
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
switch viewController {
case is MapViewController:
let nc = NotificationCenter.default
nc.post(name: Notification.Name("changeMapStatus"), object: nil)
}
}
class MapViewController: BaseViewController {
var mapBSelected: Bool = false
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
mapBSelected ? setupMapB() : setupMapA()
}
@objc func changeMapStatus() {
guard let mainTabController = tabBarController as? MainTabBarController else { return }
mainTabController.refreshMapTab()
self.MapBSelected = false
}
}
func refreshMapTab() {
let index = PrimaryFeatureTab.map.displayOrder// enum to determine tab order
DispatchQueue.main.async {
self.viewControllers?.remove(at: index)
self.viewControllers?.insert(PrimaryFeatureTab.map.rootViewController, at: index)
}
}
}