獲取當前顯示的ViewController

2021-07-03 06:23:20 字數 985 閱讀 1743

關於獲取當前viewcontroller的實現 上網查了很多,但是不全。自己整合了一下

思路通過過responder 來一步一步的找到最上層的viewcontroller 

uiviewcontroller*result =

nil;

uiwindow

* window = [[ if

(window.windowlevel!= uiwindowlevelnormal) }

}uiview *frontview = [[window subviews] objectatindex:0];

nsarray *array = [window subviews];

//找到最上層的view

id nextresponder = [frontview nextresponder];

if ([nextresponder iskindofclass:[uiviewcontroller

class]])

result = nextresponder;

else

result = window.rootviewcontroller;   

return result;

首先進行第一步就死獲取 當前window ,查了一下 keywindow 這個東西 儲存rootviewcontroller的window 預設的模式是normal, 還有二個是alter 和statusbar。

得到window後 就可以 順藤摸瓜了 

window是展現檢視的,就要從view找起,通過index為0的uiview向上找,直到「響應鏈」上的乙個viewcontroller。

參考文章:

但是這樣做是有缺陷的

但view controller present的時候 這個方法就 失效了 

所以我們需要加上一句

while

(result.presentedviewcontroller)

順藤摸瓜 

獲取當前顯示的activity

用activitymanager裡面可以獲取到當前執行的所有任務,所有程序和所有服務,這是任務管理器的核心。仔細看getrunningtasks的文件,裡面說獲取的是系統中 running 的所有task,running 狀態包括已經被系統凍結的task。而且返回的這個列表是按照順序排列的,也就是說...

獲取使用者當前顯示的Activity

在ios裡的介面跳轉是要知道當前頁面是哪個才能正確跳轉,在android開發中有時也可能需要知道使用者當前的activity是哪個。那要怎麼獲取呢?activitymanager am activitymanager getsystemservice activity service compone...

PHP獲取當前月份,多種顯示方法

php獲取當前月份有3種常用的顯示方法 1 date m 顯示的月份為jan,feb格式 2 date m 顯示的格式為01,02,03格式 3 date n 顯示的格式為1,2,3格式 如果需要在前端以select框的形式顯示,可以使用如下 selected selected 其中,使用autoc...