我的标签栏中有五个标签栏项目。第五项是弹出ViewController。因此,当我单击该按钮时,将在当前控制器中显示一个弹出窗口。我使用UIViewController作为实现此目的的子类。
我的问题是,如果我在FirstTabItem中添加一个弹出ViewController并移至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
}
}
答案 0 :(得分:0)
您有验证码
UIApplication.topViewController()?.present ....
如果那是您要关闭的那个,则必须从显示的同一视图控制器中关闭
UIApplication.topViewController()?.dismiss...
通常,您不希望在此函数中执行所有这些代码-它应该只是返回一个Bool,而不更改视图层次结构。