以下内容转自我简书中的《iOS 获取当前正在显示的视图控制器ViewController(最全)》
目录
先插入以下介绍以下本编文章除标题所讲知识外,还额外包含的内容有如下:
1、获取当前显示的视图控制器ViewController
2、如何在多次presentViewController后直接返回到指定层
3、presentedViewController 与 presentingViewController
4、如何通过视图(view)获取该视图所在的控制器(viewController)
一、前言:
本来不怎么想写这篇文章的, 因为这种东西网上随便搜一大堆。但是还是发现项目中有些同学,没怎么理解好,直接照搬网上的,殊不知其本身虽处理了大部分情况,却仍有一些情况是漏掉的。所以就有了下面这篇文章。
二、场景:
在处理 URL Router 跳转的时候,经常需要得到“当前最上层的视图控制器”来进行视图跳转。
三、注意点:
网上比较多遗漏的场景是:A present B, B present C,在A中查找当前显示的视图控制器的情况。
四、直接快速使用方法:
使用方法很简单:
①、Podfile添加pod 'CJBaseHelper/UIViewControllerCJHelper'
,并pod update或pod install
②、库引入成功后,直接使用UIViewControllerCJHelper类中的findCurrentShowingViewController
或findCurrentShowingViewControllerFrom:
方法即可。如:
UIViewController *vc = nil;
vc = [UIViewControllerCJHelper findCurrentShowingViewController];
或
vc = [UIViewControllerCJHelper findCurrentShowingViewControllerFrom:self];
如果您还不清楚,可详细查看以下说明。如果已清楚,那么下面的内容您可不比看了,除非你想了解下原理。
详细的使用方法及原理介绍如下:
1、查看开源库CJBaseHelper内容,可略过
获取方法已整理到开源库CJBaseHelper中的UIViewControllerCJHelper
。该开源库内容,可通过pod search CJBaseHelper
查看,查看结果如下:
CJBaseHelper/UIViewControllerCJHelper.png
如果你在终端执行pod search CJBaseHelper
,未得到上面的结果,是因为cocoaPods的本地search_index.json文件有问题,
方法①:请前往~/Library/Caches/CocoaPods/search_index.json
将该文件删除,
方法②:或者直接在终端输入:rm ~/Library/Caches/CocoaPods/search_index.json
,
删除后,再重新执行命令即可。
2、Podfile添加pod 'CJBaseHelper/UIViewControllerCJHelper'
后,执行pod install
即可使用该库中的UIViewControllerCJHelper,即。
即通过调用以下两个方法中的任意一个即可获取到当前显示的视图控制器。
3、实际使用过程
五、上库中实际代码:
代码中包括两种方法,一种是遍历方法,一种是递归方法,两种方法都能正确查找到当前正在显示的视图控制器。废话不多说,直接上代码。
其他补充:
2、如何在多次presentViewController后直接返回到指定层
场景:如果多个控制器都通过 present 的方式跳转呢?比如从A跳转到B,从B跳转到C,从C跳转到D,如何由D直接返回到A呢?
答:可以通过 presentingViewController 一直找到A控制器,然后调用A控制器的 dismissViewControllerAnimated 方法。方法如下:
PS:如果不是想直接返回到A控制器,比如想回到B控制器,while循环的终止条件可以通过控制器的类来判断。
3、presentedViewController 与 presentingViewController
假设从A控制器通过present的方式跳转到了B控制器,那么 A.presentedViewController 就是B控制器;
B.presentingViewController 就是A控制器。
4、如何通过视图(view)获取该视图所在的控制器(viewController)
结束语:
如欲了解本文中更详细内容请点击查看本文中所用开源库CJBaseHelper中的UIViewControllerCJHelper
。
=======================================================
其他更多好用的开源库欢迎跳转我的GitHub主页,欢迎Watch/Star/Follow。
=======================================================