iOS 獲取當前顯示的ViewController

我們在非視圖類中想要隨時展示一個view時白筹,需要將被展示的view加到當前view的子視圖悲龟,或需要 presentViewController,或pushViewContrller隐锭,這些操作都需要獲取當前正在顯示的ViewController晒杈。

發(fā)覺百度搜出來好多不科學(xué)的方法柑贞,有時候還是自己動腦子想好方椎。。凌外。
下面提供了一個公用的方法去獲取當前ViewController辩尊,也建議直接改成靜態(tài)方法涛浙,放到工具類里直接調(diào)用更加科學(xué)康辑。

具體代碼如下:

//獲取當前屏幕顯示的viewcontroller
- (UIViewController *)getCurrentVC
{
    UIViewController *rootViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
    
    UIViewController *currentVC = [self getCurrentVCFrom:rootViewController];
    
    return currentVC;
}

- (UIViewController *)getCurrentVCFrom:(UIViewController *)rootVC
{
    UIViewController *currentVC;
    
    if ([rootVC presentedViewController]) {
        // 視圖是被presented出來的
        
        rootVC = [rootVC presentedViewController];
    }

    if ([rootVC isKindOfClass:[UITabBarController class]]) {
        // 根視圖為UITabBarController
        
        currentVC = [self getCurrentVCFrom:[(UITabBarController *)rootVC selectedViewController]];
        
    } else if ([rootVC isKindOfClass:[UINavigationController class]]){
        // 根視圖為UINavigationController
        
        currentVC = [self getCurrentVCFrom:[(UINavigationController *)rootVC visibleViewController]];
        
    } else {
        // 根視圖為非導(dǎo)航類
        
        currentVC = rootVC;
    }
    
    return currentVC;
}

解析:代碼主要使用了遞歸的思想(哈哈哈,畢業(yè)工作半年轿亮,發(fā)覺第一次寫iOS用到遞歸疮薇,突然覺得高大上)。
[UIApplication sharedApplication].keyWindow.rootViewController獲取到的是項目的根視圖我注,結(jié)合可能用到UITabBarController或者UINavigationController作為導(dǎo)航結(jié)構(gòu)按咒,以及可能present出新的VC,其實如果用storyboard的方式寫UI的話就很清晰但骨,類似樹的結(jié)構(gòu)励七,再利用遞歸找到當前視圖。

ps:
如果是需要push新的視圖奔缠,就很簡單啦:
用上面的方法獲取到頂層的視圖掠抬,判斷currentVC.navigationController是否為nil。(為nil校哎,則新建UINavigationController在push两波;否則直接用currentVC.navigationController去push)

ps2:
補充評論里好的建議,如果用到的場景主要是vc里闷哆,可以弄成類別如下:

#import "UIViewController+Helper.h"

@property (nonatomic, strong ,readonly) UIViewController * _Nullable currentVC;

//當前屏幕顯示的viewcontroller
-(UIViewController *)currentVC{
UIViewController *rootViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
UIViewController *controller = [self getCurrentVCFrom:rootViewController];
return controller;
}

//getCurrentVCFrom參考上文

還有什么不懂的就留言問問哈腰奋。。抱怔。劣坊。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市屈留,隨后出現(xiàn)的幾起案子讼稚,更是在濱河造成了極大的恐慌,老刑警劉巖绕沈,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锐想,死亡現(xiàn)場離奇詭異,居然都是意外死亡乍狐,警方通過查閱死者的電腦和手機赠摇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人藕帜,你說我怎么就攤上這事烫罩。” “怎么了洽故?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵贝攒,是天一觀的道長。 經(jīng)常有香客問我时甚,道長隘弊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任荒适,我火速辦了婚禮梨熙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘刀诬。我一直安慰自己咽扇,他們只是感情好,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布陕壹。 她就那樣靜靜地躺著质欲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪糠馆。 梳的紋絲不亂的頭發(fā)上嘶伟,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天,我揣著相機與錄音榨惠,去河邊找鬼奋早。 笑死,一個胖子當著我的面吹牛赠橙,可吹牛的內(nèi)容都是我干的耽装。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼期揪,長吁一口氣:“原來是場噩夢啊……” “哼掉奄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起凤薛,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤姓建,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后缤苫,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體速兔,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年活玲,在試婚紗的時候發(fā)現(xiàn)自己被綠了涣狗。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谍婉。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖镀钓,靈堂內(nèi)的尸體忽然破棺而出穗熬,到底是詐尸還是另有隱情,我是刑警寧澤丁溅,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布唤蔗,位于F島的核電站,受9級特大地震影響窟赏,放射性物質(zhì)發(fā)生泄漏妓柜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一饰序、第九天 我趴在偏房一處隱蔽的房頂上張望领虹。 院中可真熱鬧规哪,春花似錦求豫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至杯巨,卻和暖如春蚤告,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背服爷。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工杜恰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人仍源。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓心褐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親笼踩。 傳聞我的和親對象是個殘疾皇子逗爹,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 前言:我們在VC中添加一個自定義的View時,有時候添加的這個View上嚎于,可能會有按鈕或者其他的點擊事件掘而,如果該事...
    辰星撒歡的蒜苗閱讀 1,020評論 2 2
  • *7月8日上午 N:Block :跟一個函數(shù)塊差不多,會對里面所有的內(nèi)容的引用計數(shù)+1于购,想要解決就用__block...
    炙冰閱讀 2,488評論 1 14
  • 前言的前言 唐巧前輩在微信公眾號「iOSDevTips」以及其博客上推送了我的文章后袍睡,我的 Github 各項指標...
    VincentHK閱讀 5,363評論 3 44
  • 天機老人有一弟子,名叫八錦肋僧,頗有術(shù)學(xué)天賦斑胜。天機術(shù)成之后持舆,八錦游歷人間,于黎國遇黎國主伪窖,黎國主深知其具經(jīng)天緯地之才逸寓,...
    錦玄飛墨閱讀 422評論 0 1
  • 1竹伸、 最近天氣越來越熱,趁著午后略微涼爽的時候簇宽,斷斷續(xù)續(xù)的把夏天的衣服理了一遍勋篓。 清理的過程中,我驚訝的發(fā)現(xiàn)魏割,好像...
    大臉and小臉閱讀 503評論 0 1