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;
    }

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

  • 相关阅读:
    使用 Python 自动键鼠操作实现批量截图 并用工具转成 pdf 文档
    Nginx 常用屏蔽规则
    php 分页中间省略
    php word转pdf 读取pdf内容
    微信公众号发送客服消息
    php ip 城市(百度地图)
    php CURL
    微信网页分享-1.6.0版本
    mamp 安装php扩展
    php查询所有文件
  • 原文地址:https://www.cnblogs.com/On1Key/p/5442404.html
Copyright © 2011-2022 走看看