追寻View上的ViewController

在我们做项目开发中,经常都是需要将一个view新增(addSubView)到一个superView。但是经过多次之后,此时需要在当前的这个view去persentViewController时候。发现此时没有合适的ViewController的对象。所以此时的思路一般有两种:

1.直接获取window的rootViewController

2.不断遍历view的superView直到获取到第一个viewController


第一种的解决方法:

UIViewController *VC = [[[UIApplication sharedApplication] keyWindow] rootViewController];

第二种解决方法

在UIViewController的类别中创建如下方法

+ (UIViewController *)getRecentlyViewControllerForView:(UIView *)currentView {
   for(UIView *next = [currentView superView]; next; next = [next superView]) {
          UIResponsder *nextResponsder = [next nextResponder];
          if([nextResponsder isKindOfClass:[UIViewController class]]) {
                  return nextResponsder;
          }
    }
    return nil;
}

如上两种解决方案,按照业务需求进行选择,此时就能在view进行view controller才能做的一些跳转操作。

获取当前项目的顶层Controller

+ (UIViewController *)getCurrentController {
     UIViewController *vc = [UIApplication sharedApplication].keyWindow.rootViewController;

    while (YES) {
        if ([vc isKindOfClass:[UITabBarController class]]) {
            vc = ((UITabBarController *)vc).selectedViewController;
        } else if ([vc isKindOfClass:[UINavigationController class]]) {
            vc = ((UINavigationController *)vc).visibleViewController;
        }
        if ([vc isKindOfClass:[UITabBarController class]] || [vc isKindOfClass:[UINavigationController class]]) {
            continue;
        }
    
        if (vc.presentedViewController) {
            vc = vc.presentedViewController;
        } else {
            break;
        }
    }
    return vc;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容