iOS 根据类名,获取已存在的controller,无论是模态出来还是push出来的controller,都可以找到

我们在写代码时,有时会遇到:需要知道某个controller是否已经存在,或着,要拿到已存在的某个controller对象,这里提供一种可以获取到你想要的controller对象,只需要传入类名即可,废话不多说直接上代码:

- (UIViewController *)getActivityViewController:(NSString *)controllerName {

UIViewController *topVC = [UIApplication sharedApplication].keyWindow.rootViewController;

while (topVC.presentedViewController) {

topVC = topVC.presentedViewController;

if ([[topVC.class description] isEqualToString:@"UINavigationController"]) {

UINavigationController *navi = (UINavigationController *)topVC;

if (navi && navi.viewControllers && navi.viewControllers.count > 0) {

NSInteger count = navi.viewControllers.count;

for (NSInteger i=count-1; i>=0; i--) {

UIViewController *controller = [navi.viewControllers objectAtIndex:i];

if ([[controller.class description] isEqualToString:controllerName]) {

return controller;

}

}

}

}

}

return nil;

}

如果当前存在的同一类名的controller有多个,你要拿到最新的一个可以用下面这种方法:

- (UIViewController *)getActivityViewController:(NSString *)controllerName {

UIViewController *topVC = [UIApplication sharedApplication].keyWindow.rootViewController;

UIViewController *resaultVC = nil;

while (topVC.presentedViewController) {

topVC = topVC.presentedViewController;

if ([[topVC.class description] isEqualToString:@"UINavigationController"]) {

UINavigationController *navi = (UINavigationController *)topVC;

if (navi && navi.viewControllers && navi.viewControllers.count > 0) {

NSInteger count = navi.viewControllers.count;

for (NSInteger i=count-1; i>=0; i--) {

UIViewController *controller = [navi.viewControllers objectAtIndex:i];

if ([[controller.class description] isEqualToString:controllerName]) {

resaultVC =  controller;

}

}

}

}

}

return resaultVC;

}

当然这两个方法的前提是,你如果是 present 出来的congtroller,并且导航控制器是 UINavigationController 类型,如果导航控制器是自定义的,那么在判断 if ([[topVC.class description] isEqualToString:@"UINavigationController"]) 时@"UINavigationController" 要替换成你自定义的类名即可。

时间: 2024-10-10 23:17:07

iOS 根据类名,获取已存在的controller,无论是模态出来还是push出来的controller,都可以找到的相关文章

ios CoreData 用父类的实例对象person接收存有子类的数组,打印person.class ,结果是子类类名?还是父类类名(已解决)

新建Person类 person的子类 Student Teacher 今天做数据库封装时想到的,因为查询出的结果都继承自NSManagerObject,但是他的子类属性又不一定一样,所以我就想我在在查询之后能不能判断他是那个子类并且按照子类的属性进行赋值,所以首先我要数组存的对象的类进行判断 测试如下:(把主要代码贡献如下,其他文件自己建议下吧,很简单) NSMutableArray * array = [NSMutableArray array]; NSMutableArray * arra

Spring Security应用开发(12) 获取已登录用户信息

1.1. 获取已登录用户信息 在使用Spring Security的应用程序中,可以通过SecurityContext接口获取到已经登录的用户的信息.SecurityContext接口的实例通过SecurityContextHolder的静态方法getContext()获取. 通过SecurityContext可以获取到Authentication接口的实例,而通过Authentication接口可以获取到: principal:主角,通常是一个UserDetails接口的实例,而默认就是Use

如何从ios酷我音乐盒中导出已下载的音乐文件(使用Java编程实现)

如何从ios酷我音乐盒中导出已下载的音乐文件 本文所涉及内容用于技术学习,请勿用于不正当用途,否则后果自负. 酷我音乐ios版下载的音乐文件,通过同步助手等软件查看时,发现音乐文件都是一串数字命名.通过网上查找和自己尝试,发现那些文件都是音频文件改了文件名而已.只要修改回文件名,就能和正常的音乐一样播放了. 参考网址: http://blog.sina.com.cn/s/blog_4d5428240101enzu.html 在网上找到了一个软件,也就是上面参考网址中的软件,但是使用的时候出现了问

winPcap_4_获取已安装设备的高级信息

由 pcap_findalldevs_ex() 返回的每一个 pcap_if 结构体,都包含一个 pcap_addr 结构体,这个结构体由如下元素组成: 一个地址列表 一个掩码列表 (each of which corresponds to an entry in the addresses list). 一个广播地址列表 (each of which corresponds to an entry in the addresses list). 一个目的地址列表 (each of which

抱团App iOS版1.6已于5月19日0点10分发布

抱团App iOS版1.6已于5月19日0点10分发布, App Store 下载地址:https://itunes.apple.com/cn/app/bao-tuan-tuan-gou-jing-pin/id789571099?ls=1&mt=8 欢迎各种吐槽,技术交流,等等. 抱团App iOS版1.6已于5月19日0点10分发布,布布扣,bubuko.com

李洪强iOS开发-网络新闻获取数据思路回顾

李洪强iOS开发-网络新闻获取数据思路回顾 01 创建一个继承自AFHTTPSessionManager的工具类:LHQNetworkTool 用来发送网络请求获取数据  1.1 定义类方法返回单例对象 1.2 单例的实现,设置baseURL,设置超时时长等 02 创建一个分类, 传入一个类的参数返回一个数组,返回当前类的所有属性 用在模型中处理模型数据 03 创建图片轮播模型(model)类发送请求获取轮播图片的数据  3.1 定义属性: 标题,图片 定义两个类方法: (1)传入一个字典的参数

windows 获取已插入U盘

static int GetUdisk(vector <CString> &udisk) { CHAR szDriveStrings[1024]; PCHAR szDriver; memset(szDriveStrings, 0, sizeof(szDriveStrings)); GetLogicalDriveStrings(sizeof(szDriveStrings), szDriveStrings); szDriver = szDriveStrings; while (szDriv

node.js express fs 获取已上传文件数据格式

{ "fieldName": "photo", "originalFilename": "1395130808991.jpg", "path": "tmpupload/25546-z8u01y.jpg", "headers": { "content-disposition": "form-data; name=\"photo\&

封装一个通过类名获取对象的函数

由于HTML DOM 的getElementsByClassName()不兼容ie9以下浏览器,所以需要封装一个通过类名获取对象的函数getElementsByClass().参数class是要获取的class类名,parent是其父级的id,确定范围用的,可选.