繁体   English   中英

UIViewController作为另一个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...

通常,您不希望在此函数中执行所有代码 - 它应该只返回B​​ool,而不是更改视图层次结构。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM