如何以模态方式显示ViewController时禁用所有UITabBarItem?

时间:2018-05-30 07:28:25

标签: ios objective-c xcode uitabbarcontroller uitabbar

我已将 UITabBar 实施到我的应用中。在一个UITabBar项目的ViewController中,我展示了另一个以模态方式呈现的ViewController。在此阶段,我想要禁用所有UITabBar项目并在 willdisappear 中重新启用。

  

在下面的委托中,如果我以模态方式获得   ViewController然后,比较我可以返回没有任何动作。但   我对如何获得可见的ViewController感到困惑   模态。   这种方法会起作用吗?

 (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController{
//HOW CAN I GET HERE VISIBLE VIEWCONTROLLER I.E. PRESENTED MODALLY VIEWCONTROLLER.
}

2 个答案:

答案 0 :(得分:1)

禁用:

self.tabBarController.tabBar.userInteractionEnabled = NO;

启用

self.tabBarController.tabBar.userInteractionEnabled = YES;

答案 1 :(得分:0)

而不是禁用标签栏,您可以隐藏所呈现视图控制器的viewWillAppear中的标签栏,并再次在viewWillDisappear中显示。

viewWillAppear

    tabBarController?.tabBar.isHidden = true

viewWillDisappear

    tabBarController?.tabBar.isHidden = false

但如果你的动机是可见的视图控制器,你可以使用以下UIApplication扩展名。

extension UIApplication {

    class func topViewController(base: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {
        if let nav = base as? UINavigationController {
            return topViewController(base: nav.visibleViewController)
        }
        if let tab = base as? UITabBarController {
            if let selected = tab.selectedViewController {
                return topViewController(base: selected)
            }
        }
        if let presented = base?.presentedViewController {
            return topViewController(base: presented)
        }
        return base
    }
}