ios获取窗口当前显示的控制器

iOS获取窗口当前显示的控制器

在iOS应用中,我们经常需要获取当前窗口显示的控制器(ViewController),比如做一些页面跳转、弹出提示框等操作。本文介绍了几种获取当前窗口控制器的方法。

方法一:获取当前window的rootViewController

if let rootViewController = UIApplication.shared.windows.filter({$0.isKeyWindow}).first?.rootViewController {
    // do something with root view controller
}

该方法通过UIApplication的windows数组获取当前显示的window,然后通过判断window的keyWindow属性获取当前的窗口,最后获取该窗口的rootViewController属性即可。

方法二:获取当前view的viewController

extension UIView {
    func parentViewController() -> UIViewController? {
        var parentResponder: UIResponder? = self
        while parentResponder != nil {
            parentResponder = parentResponder!.next
            if let viewController = parentResponder as? UIViewController {
                return viewController
            }
        }
        return nil
    }
}

该方法是通过对UIView进行扩展(extension),实现了parentViewController方法,该方法遍历view的父视图,找到第一个UIViewController作为view的控制器,最后返回该控制器。

方法三:获取当前最顶层的控制器

extension UIApplication {
    class func topViewController(controller: UIViewController? = UIApplication.shared.windows.filter {$0.isKeyWindow}.first?.rootViewController) -> UIViewController? {
        if let navigationController = controller as? UINavigationController {
            return topViewController(controller: navigationController.visibleViewController)
        }
        if let tabController = controller as? UITabBarController {
            if let selected = tabController.selectedViewController {
                return topViewController(controller: selected)
            }
        }
        if let presented = controller?.presentedViewController {
            return topViewController(controller: presented)
        }
        return controller
    }
}

该方法是通过对UIApplication进行扩展(extension),实现了topViewController方法,递归遍历当前窗口中所有的控制器,找到最顶层的控制器,并返回该控制器。注意该方法会忽略所有的UIPopoverPresentationController。

方法四:获取当前可见的导航控制器

if let navigationController = self.window?.rootViewController?.presentedViewController as? UINavigationController {
    // do something with navigation controller
}

该方法是适用于有导航控制器的场景,通过获取当前窗口的rootViewController属性,再通过presentedViewController属性获取当前正在显示的导航控制器,最后通过as?UINavigationController进行类型转换即可。

综上,我们介绍了4种方法可以获取当前窗口显示的控制器,可以根据你的具体需求进行选择使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ios获取窗口当前显示的控制器 - Python技术站

(0)
上一篇 2023年3月28日
下一篇 2023年3月28日

相关文章

  • gho是什么文件格式?.gho文件怎么打开?

    GHO文件格式是什么? GHO文件格式是由Symantec Ghost软件创建的一种磁盘映像文件格式。它是一种备份和还原磁盘的文件格式,常用于系统克隆、恢复和部署。GHO文件包含了整个磁盘的扇区数据,包括操作系统、应用程序、文件和文件系统的结构。 如何打开GHO文件? 要打开GHO文件,您需要使用Symantec Ghost软件或其他兼容的磁盘映像软件。以下…

    other 2023年8月6日
    00
  • react中axios结合后端实现GET和POST请求方式

    下面我就来详细讲解一下“React中Axios结合后端实现GET和POST请求方式”的完整攻略: 1. 引入Axios 在React项目中进行网络请求,一般需要先引入Axios库。可以使用以下命令来安装Axios: npm install axios 安装完成后,在需要的组件中引入Axios: import axios from "axios&qu…

    other 2023年6月27日
    00
  • rgba颜色和16进制颜色互相转换

    rgba颜色和16进制颜色互相转换的完整攻略 在Web开发中,我们经常需要使用颜色来设置元素的背景色、字体颜色等。常见的颜色表示方式有两种:rgba颜色和16进制颜色。本文将介绍如何将这两种颜色表示方式互相转换。 rgba颜色转16进制颜色 将rgba颜色转换为16进制颜色的方法如下: 将rgba颜色的每个分量(红、绿、蓝、透明度)转换为16进制数; 将这些…

    other 2023年5月7日
    00
  • 关于c#:destdir和make的前缀

    以下是关于C#中destdir和make的前缀的完整攻略,包括基本知识和两个示例。 基本知识 在C#中,destdir和make的前缀是用指定生成的可执行文件和库文件的输出目录的。destdir是指定输出目录的环境变量,而make的前缀是输出目录的命令行参数。 在使用destdir和make的前缀时,需要注意以下几点: destdir和make的前不能使用,…

    other 2023年5月7日
    00
  • 浅谈SpringBoot如何封装统一响应体

    第一步:创建一个统一响应体类 要封装统一响应体,我们需要先创建一个响应体类,用于封装统一的返回内容。使用Java Bean形式的类会比较方便,因为我们可以通过类的对象访问响应内容的各个部分,如状态码,返回信息,响应数据等。 下面是一个示例响应体类: public class ResponseBody { private int code; // 状态码 pr…

    other 2023年6月25日
    00
  • Visual Studio Ultimate 2013 免费下载地址

    Visual Studio Ultimate 2013 免费下载地址 Visual Studio Ultimate 2013是一个功能强大的集成开发环境,可用于各种应用程序开发,包括Web应用程序、桌面应用程序和移动应用程序。它是针对专业开发人员打造的,并提供了许多工具和功能,以提高开发人员的生产力和代码质量。 以下是Visual Studio Ultima…

    其他 2023年3月28日
    00
  • 移动WEB像素相关知识

    移动WEB像素相关知识 前言 在设计和开发移动WEB页面时,我们经常会遇到一个问题,那就是像素的概念。像素是一个非常基础的概念,但它对于移动WEB的开发者来说却非常重要。在本文中,我们将介绍关于移动WEB像素的相关知识,帮助读者更好地理解移动WEB的开发。 为什么需要了解像素 首先,我们需要了解的是,像素是测量屏幕上空间大小的基本单位,屏幕上的所有内容都是由…

    其他 2023年3月28日
    00
  • Python写的英文字符大小写转换代码示例

    Python写的英文字符大小写转换代码示例攻略 本攻略将详细讲解如何使用Python编写一个英文字符大小写转换的代码示例。我们将使用Python的内置函数和字符串操作方法来实现这个功能。 步骤1:获取用户输入 首先,我们需要获取用户输入的英文字符串。可以使用input()函数来实现这一步骤。下面是一个示例代码: text = input(\"请输入…

    other 2023年8月17日
    00
合作推广
合作推广
分享本页
返回顶部