![](/img/trans.png)
[英]UIViewController will not segue to another UIViewController?
[英]UIViewController as Subclass of another UIViewController
我的标签栏中有五个标签栏项目。 第五项是弹出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
}
}
你有代码
UIApplication.topViewController()?.present ....
如果那是您要解雇的那个,则必须从提供的相同视图控制器中解除
UIApplication.topViewController()?.dismiss...
通常,您不希望在此函数中执行所有代码 - 它应该只返回Bool,而不是更改视图层次结构。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.