获取当前页面的最层控制器 (Swift 4)

详解iOS开发获取当前控制器的正取方式 背景 在开发过程中,经常需要获取当前 window, rootViewController, 以及当前 ViewController 的需求. 如果 .m 实现不是在当前视图情况下, 我们需要快速的获取到当前控制器, 这种情况就需要先做好一层封装,我一般是通过 UIViewController 写的一个 Category 来实现, 实现起来也非常简单, 只需要我们对 控制器几个方法掌握便可。 获取根控制器 + (UIViewController *)jsd_getRootViewController{ UIWindow* window = [[[UIApplication shared 立即下载

 

第一种模式--->符合 UITabBarController ---> UINavigationController布局

//MARK: 获取当前页面的最顶层控制器 <此方法在ios13 later 会出问题,废弃>

func getCurrentVCBS() -> UIViewController {
    let keywindow = (UIApplication.shared.delegate as! AppDelegate).window//UIApplication.shared.keyWindow使用此有时会崩溃
    let firstView: UIView = (keywindow?.subviews.first)!
    let secondView: UIView = firstView.subviews.first!
    var vc = viewForController(view: secondView)!
    vc = ((vc as! UITabBarController).selectedViewController! as! UINavigationController).visibleViewController!
  
    return vc
}

private func viewForController(view:UIView)->UIViewController?{
    var next:UIView? = view
    repeat{
        if let nextResponder = next?.next, nextResponder is UIViewController {
            return (nextResponder as! UIViewController)
        }
        next = next?.superview
    }while next != nil
    return nil
}

//MARK: 校验结果的正确性

//classType: 当前页面类类型
func vcResult(classType: UIViewController.Type) -> Bool {
    return getCurrentVCBS().isKind(of: classType)
}

 

第二种模式--->所有

///获取当前显示的控制器 UIWindow (Visible)
func getCurrentVCBS2() -> UIViewController {
    let keywindow = (UIApplication.shared.delegate as! AppDelegate).window?.rootViewController//UIApplication.shared.keyWindow
    let rootVC = keywindow!//UIApplication.shared.keyWindow!.rootViewController!
    return getVisibleViewControllerFrom(vc: rootVC)
}

//方法1
func getVisibleViewControllerFrom(vc: UIViewController) -> UIViewController {
    
    if vc.isKind(of: UINavigationController.self) {
        return getVisibleViewControllerFrom(vc: (vc as! UINavigationController).visibleViewController!)
    } else if vc.isKind(of: UITabBarController.self) {
        return getVisibleViewControllerFrom(vc: (vc as! UITabBarController).selectedViewController!)
    } else {
        if (vc.presentedViewController != nil) {
            return getVisibleViewControllerFrom(vc: vc.presentedViewController!)
        } else {
            return vc
        }
    }
    
}

//方法2
func topViewControllerWithRootViewController(rootVC: UIViewController) -> UIViewController {
    
    if rootVC.isKind(of: UITabBarController.self) {
        let tabVC = rootVC as! UITabBarController
        return topViewControllerWithRootViewController(rootVC: tabVC.selectedViewController!)
    } else if rootVC.isKind(of: UINavigationController.self) {
        let navc = rootVC as! UINavigationController
        return topViewControllerWithRootViewController(rootVC: navc.visibleViewController!)
    } else if (rootVC.presentedViewController != nil) {
        return topViewControllerWithRootViewController(rootVC: rootVC.presentedViewController!)
    } else {
        return rootVC
    }
    
}

///验证
func vcResult2(classType: UIViewController.Type) -> Bool {
    return getCurrentVCBS2().isKind(of: classType)
}

 

 

 

 

 

 

 

 

 

 

 

Ubuntu20.04安装Ceres库 ceres真难安装。 阅读详情

相关推荐

直流电机双闭环调速系统MATLAB仿真

Chopper-Fed DC Motor Drive This example shows a Chopper-Fed DC Motor Drive. Description The DC motor is fed by the DC source through a chopper which consists of GTO thyristor and free-wheeling diode ...

飞行动力的博客 2万+

iOS Swift获取当前显示的ViewController

class public func getCurrentVc() -> UIViewController{    let rootVc = UIApplication.shared.keyWindow?.rootViewController    let currentVc =getCurrentVcFrom(rootVc!

Lee坚武的博客 1804

LaTeX新手入门以及TeXlive和TeXstudio的安装使用

作为一个新手,LaTeX的了解和使用很是费了一番功夫,因此,在这里给找不到路的同志们稍微介绍一下。如有错误,敬请指正。本篇内容基于Win10系统,因此安装在Mac或者Linux上的同学可以再找找其他的介绍文章。 目录 LaTeX介绍 LaTeX环境配置 一、TeXlive下载 二、TeXlive安装 1. 安装main installer 2. 正式安装 三、TeXstudio安装...

zywhehe的博客 21万+

Swift--getCurrentVC拿到当前控制器

很多应用场景会用到,话不多说… func getCurrentVC1() -> UIViewController? { var result: UIViewController? = nil if let window = UIApplication.shared.keyWindow{ var keyWindow = window // ...

SoftwareDoger的博客 1309

解锁RK3588:内核模块签名与安全启动配置全攻略

RK3588作为一款高性能嵌入式SoC芯片,其内核模块签名与安全启动配置是保障系统安全的核心机制。本文详细介绍了RK3588的芯片特性,重点阐述了安全启动的硬件信任链原理和内核模块签名的实现方法。通过具体步骤演示了从密钥生成、模块签名到验证加载的完整流程,并深入解析了安全启动配置的硬件连接、软件工具准备、密钥烧录等关键环节。此外,还提出了防御旁路攻击和动态信任链扩展等高级安全策略,为RK3588在工业控制、智能安防等高安全要求场景中的应用提供了全面的安全解决方案。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 346

【报错解决】彻底解决 CondaHTTPError: HTTP 000 CONNECTION FAILED for url 报错

CondaHTTPError: HTTP 000 CONNECTION FAILED for url 错误本质上是由于 Conda 无法访问远程仓库引起的,常见原因包括网络不通、防火墙或安全软件阻拦、SSL 证书异常以及默认仓库不可达。解决该问题的关键在于:确保网络畅通、配置国内稳定镜像源、调整防火墙和安全设置、处理 SSL 证书问题,并保持 Conda 版本更新。通过这些方法,几乎可以彻底消除连接失败问题,保证 Conda 环境的正常使用和包管理的稳定性。

博客 1162

swift获取当前展示Controller

【代码】swift获取当前展示Controller。

Cheung1992的博客 717

直流无刷电机FOC控制算法 理论到实践 —— 理论(二)

在上一章节,我们对于FOC大体有了一个介绍,本博文将详细描述有关Clark变化、Park变化、反Park变化以及SVPWM的理论实现原理,也即相关数学运算实现。

爱出名的狗腿子 1万+

[Swift]获取最顶层视图控制器

/// 验证 func verificationAction(code:Int) { guard let topVC = ScreenUIManager.topViewController() else { return } let vc = AppSafeVerificationVC() vc.reCode = code vc.modalPresentationStyle = .overCurrentContext vc.moda.

Gamin 2902

【入门AUTOSAR网络管理测试】RSS-PBM状态转换

随着智能电动汽车行业的快速发展,目前AUTOSAR网络管理也得到了广泛应用,AUTOSAR网络管理测试也是汽车网络测试中非常重要的环节,NM问题导致的汽车ECU不能唤醒、电瓶亏电等问题,对于新入门AUTOSAR网络管理测试的同学不清楚如何开展测试,那么本章节就主要给大家介绍网络管理中RSS-PBM状态转换如何测试。【入门AUTOSAR网络管理测试】AUTOSAR网络管理规范需求解读。

测试领域技术分享 872

PX4从放弃到精通(五):PX4中的姿态表示方法及转换关系

文章目录机体坐标系与地理坐标系一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 机体坐标系与地理坐标系 在实际应用中,加速度计的测量轴是由运动平台安装固定此器件的轴向决定的。这些坐标轴就形成了载体坐标系,定义如下: 坐标原点设在载体质心(这样可简化运动方程的推导); y轴指向载体前方,称为横滚轴,横滚角以y轴为起始旋转轴而得到,符合右手定则; x轴与y轴夹角90°,指向载体横向,称为俯仰轴,俯仰角以x轴为起始旋转轴而得到,符合右手定则; z轴与x轴、y轴构成右手笛卡儿坐标系,指向载体垂直方向

超维空间科技的博客 8111

iOS获取父控制器swift

最近做项目的时候我将两个控制器的view添加到一个主控制器上(保留两个控制器的对象否则代理啥的都没有),当我在其中两个控制器中push的时候发现不能push。找了半天才发现两个子控制器没有navigationcontroller属性。解决的办法就是在子控制器中获取主控制器,经过和同事的讨论终 于 解决办法如下 /** 用于获取父亲控制器 - param

蓝色的sky 2844

1、 快速掌握R:初学者的计量经济学指南

本博文旨在为初学者提供一个快速掌握R语言的指南,特别是针对计量经济学领域的应用。内容涵盖了R的基本操作、数据管理、可视化、函数编写以及高级统计分析方法,如OLS回归、异方差修正和集群标准误差计算等。通过实际示例和详细说明,帮助读者在数据分析和科学研究中更加得心应手。

weixin_35734408的博客 147

swift获取View所在ViewController的控制器对象

/** swift方法   在 View 中实现这个方法即可      *viewController () -> (UIViewController) 作用:根据调用这个方法的对象 来 获取他的控制器对象      */     func viewController () -> (UIViewController){              /* 方法1.

jq2530469200的博客 4782

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

swift获取子视图的控制器

当视图层级很深的时候,如何获取当前视图的控制器? 获取根视图控制器的方法 方法一 思路:遍历当前视图的父视图,获取控制器 func responseUIViewController() -> UIViewController?{ for view in sequence(first: self.superview, next: { $0?.superview }){ if let response = view?.next{

qq_37161444的博客 613

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

IOS(swift)获取storyboard中的控制器(控制器设置)

文章目录1.storyboard拖出控制器后的设置2.要初始化的控制器和当前控制器在同一storyboard.3.要初始化的控制器和当前控制器不在同一storyboard. 1.storyboard拖出控制器后的设置 2.要初始化的控制器和当前控制器在同一storyboard. var vc = storyboard?.instantiateViewController(identifier: "TestViewController") self.navi

baidu_40537062的博客 1927

iOS 获取当前正在显示的视图控制器ViewController(最全)

目录 先插入以下介绍以下本编文章除标题所讲知识外,还额外包含的内容有如下: 1、获取当前显示的视图控制器ViewController 2、如何在多次presentViewController后直接返回到指定层 3、presentedViewController 与 presentingViewController 4、如何通过视图(view)获取该视图所在的控制器(viewController...

weixin_34314962的博客 1309

iOS 获取当前页面控制器

    在开发过程中,我们经常需要获取当前 window, rootViewController, 以及当前 ViewController 的需求,来实现跳转或者其他业务需求. 如果 .m 实现不是在当前视视图情况下, 或者在子视图中,我们需要快速的获取到当前控制器,.     我们想要与控制器无耦合的情况下, 想要直接获取到当前控制器, 基本都是通过 rootViewController 来查...

baidu_25743639的专栏 3272

iOS获取当前显示的控制器,顶层控制器的方法

获取当前控制器 + (UIViewController*)currentViewController { UIViewController* vc = [UIApplication sharedApplication].keyWindow.rootViewController; while (1) { if ([vc isKindOfClass:[...

wenzfcsdn的专栏 3399

swift中分页控制器插件

Swift中的分页控制器插件 在现代iOS应用开发中,分页控制器(Page Control)是一个非常重要的组件。它通常用于表示用户界面中多个页面之间的导航状态。用户通过分页控制器可以直观地知道当前的页面位置,以及一共有多少个页面。在本篇文章中,我们将深入探讨Swift中的分页控制器插件,了解如何实现以及常见应用场景。 什...

weixin_40421103的博客 266

swift 获取控制器

///获取当前控制器 func currentVc() -&amp;gt;UIViewController{ var vc = UIApplication.shared.keyWindow?.rootViewController if (vc?.isKind(of: UITabBarController.self))! { vc = (vc as! UITabBarC...

星宇大前端 2398

简单的swift分段控制器

首先需要倒入一个第三方文件PageTitleView 然后去Appdelegate里面设置一下导航栏 let vc = ViewController() let nav = UINavigationController(rootViewController: vc) self.window?.rootViewController ...

qq_43766083的博客 305

获取最顶层的ViewController top ViewController swift

说明 获取最顶层的ViewController 解决 为UIApplication写个扩展 // MARK: UIApplication extensions extension UIApplication { class func getTopViewController(base: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {

AI架构师易筋 2989

ios swift5 父子控制器

父控制器代码 // // ViewController.swift // 父子控制器 // // Created by macvivi on 2022/1/17. // import UIKit class ViewController: UIViewController { @IBOutlet var yellowView: UIView! override func viewDidLoad() { super.viewDidLoa.

baidu_40537062的博客 1394

swift的分段控制器

拖入PageTitleView的第三方 创建五个VIewController import UIKit class secViewController: UIViewController { private lazy var pageTitleView: MFPageTitleView = { let config = MFPageTitleViewConfig() config.titleCol...

WNEHIUZHNAG的博客 498

Swift4实现滑动和点击切换View

滑动和点击切换多个控制器 开发中会遇到需要滑动或者点击切换显示的内容。 类似下面的效果 直接上代码,比较简单 let screen_width = UIScreen.main.bounds.size.width let screen_height = UIScreen.main.bounds.size.height class ViewController: UIViewController ...

weixin_42779997的博客 1931

Swift Evolution 之 Embedded Swift:面向微控制器与无操作系统环境的编译模式

本文基于 [visions/embedded-swift.md](https://link.gitcode.com/i/2b0919db8cafc2bc9c6e72586a800397) 官方愿景文档,系统讲解 Swift 语言在资源受限环境(微控制器、固件、内核、引导程序、裸机环境)下的全新编译模式 **Embedded Swift**。你将了解它如何把 Swift 运行时与标准库的体积从约 5

gitblog_00342的博客 942
上一篇: 通过普通字符串获取一个富文本字符串 (Swift 4)
下一篇: 获取字符串的宽、高 (Swift 4)
FlyingFireFish
博客等级 码龄9年 23粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值