У меня есть пять элементов на панели вкладок. Пятый элемент - это всплывающее окно ViewController. Поэтому, когда я нажимаю эту кнопку, в текущем контроллере отображается всплывающее окно. Я использую UIViewController в качестве подкласса для достижения этой цели.
Моя проблема в том, что я добавляю всплывающий ViewController в FirstTabItem и перемещаюсь во SecondTabItem. Затем, если я снова нажму FirstTabItem, отобразится только всплывающее окно ViewController, а текущий ViewController будет скрыт. Вот мой код.
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
if let navigationController = viewController as? UINavigationController,
navigationController.viewControllers.contains(where: { $0 is MoreViewController }) {
let vc = MoreView(nibName: "MoreView", bundle: nil)
vc.modalPresentationStyle = .overCurrentContext
UIApplication.topViewController()?.present(vc, animated: true, completion: nil)
return false
} else {
return true
}
}
extension UIApplication {
class func topViewController(_ viewController: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {
if let nav = viewController as? UINavigationController {
return topViewController(nav.visibleViewController)
}
if let tab = viewController as? UITabBarController {
if let selected = tab.selectedViewController {
return topViewController(selected)
}
}
if let presented = viewController?.presentedViewController {
return topViewController(presented)
}
return viewController
}
}