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

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

  • 相关阅读:
    命令练习题2
    l命令练习题1
    命令用法习题,yum仓库的创建 chapter02
    网络基础知识
    Linux常用的命令及使用方法
    Linux 常见的常识及常用快捷键方式
    一条命令解决mac版本python IDLE无法输入中文问题
    RS232串口的Windows编程纪要
    在龙芯小本上安装Debain8.10
    mac电脑进行可见光通信实验要点
  • 原文地址:https://www.cnblogs.com/On1Key/p/5442404.html
Copyright © 2011-2022 走看看