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

呼啦一陣風
TA貢獻1802條經驗 獲得超6個贊
[UIApplication sharedApplication].keyWindow.rootViewController;

呼喚遠方
TA貢獻1856條經驗 獲得超11個贊
+ (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}

臨摹微笑
TA貢獻1982條經驗 獲得超2個贊
- (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; }}
- 3 回答
- 0 關注
- 1287 瀏覽
添加回答
舉報
0/150
提交
取消