iOS 获取当前的ViewController的方法
发布时间 - 2026-01-11 03:30:05 点击率:次本文介绍了iOS 获取当前的ViewController,分享给大家。具体如下

通过简单的判断[UIViewController class],就认定它是想要的控制器是不对的:
if ([nextResponder isKindOfClass:[UIViewController class]]) {
result = nextResponder;
}else {
result = window.rootViewController;
}
因为:isKindOfClass:确定一个对象是否是一个类的成员,或者是派生自该类的成员。
根据iOS的类图可以知道,UIViewController类还有好几个派生类,需要我们去区分的就是UITabBarController跟UINavigationController,拿到它们不是我们想要的。
1)UITabBarController通过属性viewControllers持有多个viewController;
2)UINavigationController通过压栈和出栈的方式持有或去除viewController;
3)UITableViewController就不用去判断了,它就是一个单个的viewController,而且更多的是手写创建tableView。
提供一个完整的方法:
+ (UIViewController *)getCurrentViewController {
UIViewController *result = nil;
UIWindow * window = [[UIApplication sharedApplication] keyWindow];
//app默认windowLevel是UIWindowLevelNormal,如果不是,找到它
if (window.windowLevel != UIWindowLevelNormal) {
NSArray *windows = [[UIApplication sharedApplication] windows];
for(UIWindow * tmpWin in windows) {
if (tmpWin.windowLevel == UIWindowLevelNormal) {
window = tmpWin;
break;
}
}
}
id nextResponder = nil;
UIViewController *appRootVC = window.rootViewController;
//1、通过present弹出VC,appRootVC.presentedViewController不为nil
if (appRootVC.presentedViewController) {
nextResponder = appRootVC.presentedViewController;
}else{
//2、通过navigationcontroller弹出VC
NSLog(@"subviews == %@",[window subviews]);
UIView *frontView = [[window subviews] objectAtIndex:0];
nextResponder = [frontView nextResponder];
}
//1、tabBarController
if ([nextResponder isKindOfClass:[UITabBarController class]]){
UITabBarController * tabbar = (UITabBarController *)nextResponder;
UINavigationController * nav = (UINavigationController *)tabbar.viewControllers[tabbar.selectedIndex];
//或者 UINavigationController * nav = tabbar.selectedViewController;
result = nav.childViewControllers.lastObject;
}else if ([nextResponder isKindOfClass:[UINavigationController class]]){
//2、navigationController
UIViewController * nav = (UIViewController *)nextResponder;
result = nav.childViewControllers.lastObject;
}else{//3、viewControler
result = nextResponder;
}
return result;
}
从上面代码中,可以衍生出获取当前tabBarController、navigationController,有时候可能就会用到。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# iOS
# 获取ViewController
# 获取当前ViewController
# iOS如何获取最顶层ViewController详解
# iOS使用pageViewController实现多视图滑动切换
# iOS开发教程之UIView和UIViewController的生命周期详解
# iOS 修改alertViewController弹框的字体颜色及字体的方法
# IOS 下获取 rootviewcontroller 的版本不同的问题解决办法
# iOS开发学习 ViewController使用示例详解
# 是一个
# 弹出
# 的是
# 就会
# 多个
# 它是
# 给大家
# 或者是
# 如果不是
# 不为
# 提供一个
# 它就
# 好几个
# 大家多多
# 到它
# 过压
# 派生类
# UITableViewController
# UIViewController
# class
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何为不同团队 ID 动态生成多个“认领值班”按钮
Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册
laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法
如何使用 jQuery 正确渲染 Instagram 风格的标签列表
Laravel观察者模式如何使用_Laravel Model Observer配置
如何在香港服务器上快速搭建免备案网站?
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
在线制作视频的网站有哪些,电脑如何制作视频短片?
Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案
宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
Laravel如何实现API速率限制?(Rate Limiting教程)
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧
北京企业网站设计制作公司,北京铁路集团官方网站?
如何在Windows环境下新建FTP站点并设置权限?
如何快速搭建自助建站会员专属系统?
如何获取免费开源的自助建站系统源码?
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
北京网站制作的公司有哪些,北京白云观官方网站?
高性能网站服务器部署指南:稳定运行与安全配置优化方案
Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能
Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询
html5的keygen标签为什么废弃_替代方案说明【解答】
使用C语言编写圣诞表白程序
Python函数文档自动校验_规范解析【教程】
JavaScript如何操作视频_媒体API怎么控制播放
EditPlus中的正则表达式 实战(1)
HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】
php在windows下怎么调试_phpwindows环境调试操作说明【操作】
Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明
高防服务器租用首荐平台,企业级优惠套餐快速部署
网站制作免费,什么网站能看正片电影?
网站页面设计需要考虑到这些问题
Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】
香港服务器如何优化才能显著提升网站加载速度?
Laravel如何创建自定义Artisan命令?(代码示例)
如何快速生成高效建站系统源代码?
如何获取上海专业网站定制建站电话?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
利用python获取某年中每个月的第一天和最后一天
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
如何快速搭建高效服务器建站系统?
香港网站服务器数量如何影响SEO优化效果?
电商网站制作价格怎么算,网上拍卖流程以及规则?
Laravel API资源类怎么用_Laravel API Resource数据转换
如何在服务器上三步完成建站并提升流量?

