美文网首页
iOS开发之关闭所有已弹出模态控制器

iOS开发之关闭所有已弹出模态控制器

作者: 5e2c2117fa0d | 来源:发表于2018-02-02 11:21 被阅读608次

       项目中经常会有模态方式弹出控制器的地方,有时候我们用的是导航控制器,有时候用的是导航控制器的顶部UIViewController,还有的时候用的是AppDelegate的window的rootViewController即UITabBarController。

       而有时候我们想实现一个通过在AppDelegate或在其他任何地方能实现关闭所有已经弹出的模态控制器的功能。那么以下方法就能派上用场了。

       代码中MainViewController是UITabBarController,MainNavgationController是UITabBarController当前选择的导航控制器,currentVC是当前显示的普通UIViewController。因为模态控制器可以通过任何继承自UIViewController的控制器弹出,而项目中我们可能是用的导航控制器,也有可能用的是普通控制器,还有可能用的是UITabBarController,因此我们需要做三次处理。AppDelegate中代码如下。

    - (void)closeAllPresentedViewControllers {
    
        
    
        if (![self.window.rootViewController isKindOfClass:[MainViewController class]]) {
    
            return;
    
        }
    
        MainViewController *mainVC = (MainViewController *)self.window.rootViewController;
    
        MainNavgationController *currentNav = mainVC.viewControllers[mainVC.selectedIndex];
    
        UIViewController *currentVC = currentNav.topViewController;
    
        
    
        //第一部分 导航控制器的顶部控制器弹出的模态
    
        UIViewController *vcPresentVC = currentVC.presentedViewController;
    
        if (vcPresentVC) {
    
            while (vcPresentVC.presentedViewController)  {
    
                vcPresentVC = vcPresentVC.presentedViewController;
    
            }
    
            [vcPresentVC dismissViewControllerAnimated:NO completion:nil];
    
        }
    
        
    
        //第二部分 导航控制器弹出的模态
    
        UIViewController *navPresentVC = currentNav.presentedViewController;
    
        if (navPresentVC) {
    
            while (navPresentVC.presentedViewController)  {
    
                navPresentVC = navPresentVC.presentedViewController;
    
            }
    
            [navPresentVC dismissViewControllerAnimated:NO completion:nil];
    
        }
    
        
    
        //第三部分 tab控制器弹出的模态
    
        UIViewController *tabPresentVC = mainVC.presentedViewController;
    
        if (tabPresentVC) {
    
            while (tabPresentVC.presentedViewController)  {
    
                tabPresentVC = tabPresentVC.presentedViewController;
    
            }
    
            [tabPresentVC dismissViewControllerAnimated:NO completion:nil];
    
        }
    
        
    
    }
    

    相关文章

      网友评论

          本文标题:iOS开发之关闭所有已弹出模态控制器

          本文链接:https://www.haomeiwen.com/subject/vabszxtx.html