获取当前控制器,封装方法可直接调用

                                                    

实际开发中,经常会遇到弹窗,在弹窗中有点击事件,然后跳转到指定页面。比如当前页面,点击上架,会显示弹窗显示当前上架总数,并且右边按钮可以跳转到店铺页面。那么问题来了。通常情况下这种弹窗都是一个view加在当前keywindow上。先来看一下弹窗的源码,在访问请求成功的情况下,将我们分装好的putawayview放到key window上

if ([dic[kFlag] isEqualToString:@"1"]) {
                
                [SSGOTools showInfoPopHint:@"上架成功"];
                
                PutAwayView * view = [[PutAwayView alloc]initWithFrame:CGRectMake(0,kScreenHeight -91 -X_HOME_INDICATOR_HEIGHT, kScreenWidth , 91 )];
                [view updateViewWithBean:dic[kMsg]];
                __weak PutAwayView * weakView = view;
                weakView.shopblock = ^(NSInteger tag) {
                    if (tag == 102) {
                     
                        ShopListVC *vc = [ShopListVC new];
                        [[SSGOTools getCurrentViewController].navigationController pushViewController:vc animated:YES];
                    }
                };
                UIWindow *window = [[UIApplication sharedApplication]keyWindow];
                [window addSubview:view];
                
                dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC));
                dispatch_after(delayTime, dispatch_get_main_queue(), ^{
                    [view removeFromSuperview];
                });
                
            }

通过view的block回调,我们推出一个新的页面。到店铺页面。那么如何获得当前的window背后显示的控制器呢?这里需要一个方法,已经封装成类方法,拿来直接用即可,代码如下:

+(UIViewController *)getCurrentViewController
{
    return [SSGOTools topViewControllerWithRootViewController:[[UIApplication sharedApplication].keyWindow rootViewController]];
}

+ (UIViewController*)topViewControllerWithRootViewController:(UIViewController*)rootViewController
{
    if ([rootViewController isKindOfClass:[RDVTabBarController class]]) {
        RDVTabBarController *tabBarController = (RDVTabBarController *)rootViewController;
        return [SSGOTools topViewControllerWithRootViewController:tabBarController.selectedViewController];
    } else if ([rootViewController isKindOfClass:[UINavigationController class]]) {
        UINavigationController* navigationController = (UINavigationController*)rootViewController;
        return [SSGOTools topViewControllerWithRootViewController:navigationController.visibleViewController];
    } else if (rootViewController.presentedViewController) {
        UIViewController* presentedViewController = rootViewController.presentedViewController;
        return [SSGOTools topViewControllerWithRootViewController:presentedViewController];
    } else if ( [rootViewController isKindOfClass:[UIPageViewController class]]){
        UIPageViewController * pageViewController = (UIPageViewController*)rootViewController;
        return  pageViewController.viewControllers[0];
        
    }else {
        return rootViewController;
    }
}

猜你喜欢

转载自blog.csdn.net/lee727n/article/details/79669335