ios - 如何在 iOS 上找到最顶层的 View Controller

我现在遇到了几种情况,可以很方便地找到“最顶层” View Controller (负责当前 View 的 Controller ),但还没有找到方法。

基本上挑战是这样的:鉴于一个在不是 View Controller 的类中执行(或 View )[和没有事件 View 的地址] 并且没有传递最顶层 View Controller 的地址(或者说,导航 Controller 的地址),是否有可能找到该 View Controller ? (如果是的话,怎么做?)

或者,如果做不到这一点,是否有可能找到最顶层的 View ?

最佳答案

我认为您需要将接受的答案和@fishstix 结合起来

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

关于ios - 如何在 iOS 上找到最顶层的 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6131205/

相关文章:

ios - 不区分大小写的比较 NSString

ios - 架构 i386 : _OBJC_CLASS_$_SKPSMTPMessage", 的 u

objective-c - 了解 dispatch_async

ios - Objective-C 中的自动引用计数不能防止或最小化什么样的泄漏?

iphone - iOS 7 导航栏文本和箭头颜色

objective-c - iOS 8 对尚未渲染的 View 进行快照会导致快照为空

ios - Pod 安装停留在 "Setting up CocoaPods Master repo"

ios - 如何在 iOS 上获取设备品牌和型号?

objective-c - 为设备编译时出现 Apple Mach-O 链接器错误

iphone - 如何使用使用 Interface Builder 创建的 nib 文件加载 UIV