【发布时间】:2020-04-15 20:59:31
【问题描述】:
目前我有一个视图控制器,当您点击索引 3 处的选项卡(地图选项卡)时,它会加载一个包含地图(地图 A)的视图控制器。 注意:每次按下地图选项卡时,它都应该加载地图 A。 在主选项卡上的索引 0 处有一个chiclet,点击它可以让您从地图 A 切换到地图 B,然后获取你到那个地图(这个开关是手动完成的,所以使用标签栏的 selectedIndex 将标签栏保持在屏幕上,这意味着 viewWillAppear() 似乎没有被调用)。 注意:地图 A 和地图 B 共享相同的 viewController,bool 用于区分要在 viewWillAppear 中加载哪个。。我遇到的问题是在按下chiclet 从地图 A 切换之后到地图 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)
}
}
类 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)
}
}
}
【问题讨论】:
-
当用户离开
MapTab时,您最好处理一下。在您的 `MapViewController' 类中实现viewWillDisappear或viewDidDisappear并将地图和选择器重置为“A”状态。在自定义标签栏控制器中不需要任何东西。
标签: ios swift uitabbarcontroller uitabbar tabbarcontroller