iPhone-如何找到最頂層的視圖控制器

1.的iOS 4中引入的RootViewController的屬性上的UIWindow:

[UIApplication sharedApplication].keyWindow.rootViewController;

你需要自己設(shè)置它叉瘩,你雖然創(chuàng)建視圖控制器之后权埠。

2.我認為你需要接受的答案

+ (UIViewController*) topMostController

{

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

while (topController.presentedViewController) {

topController = topController.presentedViewController;

}

return topController;

}

3.(誰離開了標(biāo)簽欄控制器,同時穿越)填帽,這里是我的版本返回當(dāng)前可見視圖控制器:

- (UIViewController*)topViewController {

return [self topViewControllerWithRootViewController:[UIApplication sharedApplication].keyWindow.rootViewController];

}

- (UIViewController*)topViewControllerWithRootViewController:(UIViewController*)rootViewController {

if ([rootViewController isKindOfClass:[UITabBarController class]]) {

UITabBarController* tabBarController = (UITabBarController*)rootViewController;

return [self topViewControllerWithRootViewController:tabBarController.selectedViewController];

} else if ([rootViewController isKindOfClass:[UINavigationController class]]) {

UINavigationController* navigationController = (UINavigationController*)rootViewController;

return [self topViewControllerWithRootViewController:navigationController.visibleViewController];

} else if (rootViewController.presentedViewController) {

UIViewController* presentedViewController = rootViewController.presentedViewController;

return [self topViewControllerWithRootViewController:presentedViewController];

} else {

return rootViewController;

}

}

4.:

UIViewController *_topMostController(UIViewController *cont) {

UIViewController *topController = cont;

while (topController.presentedViewController) {

topController = topController.presentedViewController;

}

if ([topController isKindOfClass:[UINavigationController class]]) {

UIViewController *visible = ((UINavigationController *)topController).visibleViewController;

if (visible) {

topController = visible;

}

}

return (topController != cont ? topController : nil);

}

UIViewController *topMostController() {

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

UIViewController *next = nil;

while ((next = _topMostController(topController)) != nil) {

topController = next;

}

return topController;

}

_topMostController(UIViewController *cont)是一個輔助函數(shù)砰粹。 現(xiàn)在唧躲,所有你需要做的就是調(diào)用topMostController()而最上面的的UIViewController應(yīng)返還!

5.@UIWindow中(擴展)-(的UIViewController *)topMostController{ 的UIViewController * topController=[個體經(jīng)營RootViewController的]; 而(topController.presentedViewController){ topController=topController.presentedViewController; } 返回topController;}@結(jié)束

6.這個偉大的工程從任何根視圖微機控制找到了頂視圖控制器

+ (UIViewController *)topViewControllerFor:(UIViewController *)viewController

{

if(!viewController.presentedViewController)

return viewController;

return [MF5AppDelegate topViewControllerFor:viewController.presentedViewController];

}

/* View Controller for Visible View */

AppDelegate *app = [UIApplication sharedApplication].delegate;

UIViewController *visibleViewController = [AppDelegate topViewControllerFor:app.window.rootViewController];

7.我最近買了這個情況在我的一個項目碱璃,該項目所需的任何顯示的顯示控制器是和什么是類型(的UINavigationController CodeGo.net弄痹,經(jīng)典控制器或自定義視圖控制器)的通知視圖,修改厘贼。 所以我JUSTE發(fā)布我的代碼界酒,這是很容易的,實際上是基于一個協(xié)議嘴秸,它是靈活毁欣,每一種類型的容器控制器。它似乎與最后的答案是相關(guān)的岳掐,但在一個更靈活的方式凭疮。 你可以在這里搶碼:PPTopMostController 并得到了最頂端

UIViewController *c = [UIViewController topMostController];

8.找出哪些是特定視圖的最上面的視圖可以很容易做到通過導(dǎo)航向上的視圖/超景層次:

UIView* view = myView;

while (view.superview != nil)

view = view.superview;

對于視圖控制器的東西不是那么容易,因為沒有概念串述,作為一個“父控制器”执解。無論如何,一個解決方案可以通過利用一個事實,即控制器鏈接在一起的響應(yīng)鏈被發(fā)現(xiàn)衰腌,所以你可以瀏覽那一個:

-(UIViewController*)topMostControllerOf:(UIView*)view {

id nextResponder = nil;

id v = view;

while (nextResponder = [v nextResponder]) {

if ([nextResponder isKindOfClass:[YOURCONTROLLERCLASS class]])

return nextResponder;

v = nextResponder;

}

return nil;

}

請注意在線路增加了可選的檢查if ([nextResponder isKindOfClass:[YOURCONTROLLERCLASS class]])考慮到一個事實新蟆,即在響應(yīng)鏈中可能不會導(dǎo)致你你想到哪里去,所以更好右蕊,如果你停止搜索點在哪里你知道這是確定的琼稻。 在你的情況,YOURCONTROLLERCLASS可能的UINavigationController或任何特定的控制器你正在尋找饶囚。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末帕翻,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子萝风,更是在濱河造成了極大的恐慌嘀掸,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件规惰,死亡現(xiàn)場離奇詭異睬塌,居然都是意外死亡,警方通過查閱死者的電腦和手機卿拴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門衫仑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人堕花,你說我怎么就攤上這事≈嘈” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵呻粹,是天一觀的道長等浊。 經(jīng)常有香客問我,道長轧飞,這世上最難降的妖魔是什么过咬? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任掸绞,我火速辦了婚禮衔掸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘敞映。我一直安慰自己驱显,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布伏恐。 她就那樣靜靜地躺著翠桦,像睡著了一般胳蛮。 火紅的嫁衣襯著肌膚如雪仅炊。 梳的紋絲不亂的頭發(fā)上抚垄,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天呆馁,我揣著相機與錄音,去河邊找鬼阴挣。 笑死畔咧,一個胖子當(dāng)著我的面吹牛摹菠,可吹牛的內(nèi)容都是我干的次氨。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼犀呼,長吁一口氣:“原來是場噩夢啊……” “哼外臂!你這毒婦竟也來了律胀?” 一聲冷哼從身側(cè)響起炭菌,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤黑低,失蹤者是張志新(化名)和其女友劉穎克握,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體掰曾,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡婴梧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年孽江,在試婚紗的時候發(fā)現(xiàn)自己被綠了岗屏。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片这刷。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖暇屋,靈堂內(nèi)的尸體忽然破棺而出似袁,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布昙衅,位于F島的核電站扬霜,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏而涉。R本人自食惡果不足惜著瓶,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望啼县。 院中可真熱鬧材原,春花似錦、人聲如沸季眷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瘟裸。三九已至客叉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間话告,已是汗流浹背兼搏。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留沙郭,地道東北人佛呻。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像病线,于是被迫代替她去往敵國和親吓著。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,514評論 2 348

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