美文网首页
追寻View上的ViewController

追寻View上的ViewController

作者: mdiep | 来源:发表于2016-03-09 20:00 被阅读57次

在我们做项目开发中,经常都是需要将一个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;
}

相关文章

网友评论

      本文标题:追寻View上的ViewController

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