亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在IOS上找到最頂層視圖控制器

如何在IOS上找到最頂層視圖控制器

一只甜甜圈 2019-07-06 13:32:11
如何在IOS上找到最頂層視圖控制器現在,我遇到了一些情況,可以方便地找到“最頂層”視圖控制器(負責當前視圖的視圖控制器),但還沒有找到方法。從根本上說,挑戰是這樣的:考慮到這一點在非視圖控制器的類中執行(或視圖)[并且沒有活動視圖的地址]并且沒有傳遞最頂層視圖控制器的地址(或者說導航控制器的地址),是否有可能找到該視圖控制器?(如果是的話,怎么做?)或者,如果做不到這一點,是否有可能找到最上面的視圖?
查看完整描述

3 回答

?
呼啦一陣風

TA貢獻1802條經驗 獲得超6個贊

IOS 4在UIWindow上引入了rootViewController屬性:

[UIApplication sharedApplication].keyWindow.rootViewController;

但是,在創建視圖控制器之后,您需要自己設置它。


查看完整回答
反對 回復 2019-07-06
?
呼喚遠方

TA貢獻1856條經驗 獲得超11個贊

我認為你需要一個公認的答案和@FISTISTIX的組合

+ (UIViewController*) topMostController{
    UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController;

    while (topController.presentedViewController) {
        topController = topController.presentedViewController;
    }

    return topController;}

SWIFT 3.0+

func topMostController() -> UIViewController? {
    guard let window = UIApplication.shared.keyWindow, let rootViewController = window.rootViewController else {
        return nil    }

    var topController = rootViewController    while let newTopController = topController.presentedViewController {
        topController = newTopController    }

    return topController}


查看完整回答
反對 回復 2019-07-06
?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

完成JonasG的回答(在遍歷時忽略了選項卡條控制器),下面是返回當前可見視圖控制器的版本:

- (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;
    }}


查看完整回答
反對 回復 2019-07-06
  • 3 回答
  • 0 關注
  • 1287 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號