zoukankan      html  css  js  c++  java
  • iOS获取窗口当前显示的控制器

    解决类似网易新闻客户端收到新闻推送后,弹出一个UIAlert,然后跳转到新闻详情页面这种需求

    1.提供一个UIView的分类方法,这个方法通过响应者链条获取view所在的控制器

    - (UIViewController *)parentController
    {
        UIResponder *responder = [self nextResponder];
        while (responder) {
            if ([responder isKindOfClass:[UIViewController class]]) {
                return (UIViewController *)responder;
            }
            responder = [responder nextResponder];
        }
        return nil;
    }

    2.通过控制器的布局视图可以获取到控制器实例对象

       modal的展现方式需要取到控制器的根视图

    + (UIViewController *)currentViewController
    {
        UIWindow *keyWindow = [UIapplication sharedApplication].keyWindow;
        // modal展现方式的底层视图不同
        // 取到第一层时,取到的是UITransitionView,通过这个view拿不到控制器
        UIView *firstView = [keyWindow.subviews firstObject];
        UIView *secondView = [firstView.subviews firstObject];
        UIViewController *vc = secondView.parentController;
        if ([vc isKindOfClass:[UITabBarController class]]) {
            UITabBarController *tab = (UITabBarController *)vc;
            if ([tab.selectedViewController isKindOfClass:[UINavigationController class]]) {
                UINavigationController *nav = (UINavigationController *)tab.selectedViewController;
                return [nav.viewControllers lastObject];
            } else {
                return tab.selectedViewController;
            }
        } else if ([vc isKindOfClass:[UINavigationController class]]) {
            UINavigationController *nav = (UINavigationController *)vc;
            return [nav.viewControllers lastObject];
        } else {
            return vc;
        }
        return nil;
    }

    相关链接:获取窗口当前显示的控制器

  • 相关阅读:
    VSCode配置Python开发环境
    图像特征——边缘
    关于相机内参中的焦距fx和fy
    摄影变换和仿射变换
    为什么要引入齐次坐标
    链表一
    从小问题看懂链表
    类与对象
    排序一
    数组
  • 原文地址:https://www.cnblogs.com/On1Key/p/5442404.html
Copyright © 2011-2022 走看看