You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SwiftUI中实现获取顶层可见视图的功能?

在SwiftUI中获取顶层可见视图控制器

SwiftUI是声明式UI框架,本身没有直接对应"顶层视图控制器"的概念,但可以通过桥接UIKit的方式实现和你提供的UIKit代码相同的功能。需要注意的是,iOS 13之后keyWindow被弃用,我们需要从活跃场景中获取关键窗口,以下是适配的实现方案:

方案1:工具函数实现

import UIKit

func getTopViewController() -> UIViewController? {
    // 获取当前活跃的前台场景
    guard let activeScene = UIApplication.shared.connectedScenes.first(where: {
        $0.activationState == .foregroundActive
    }) as? UIWindowScene else {
        return nil
    }
    
    // 获取场景中的关键窗口及根控制器
    guard let rootVC = activeScene.windows.first(where: { $0.isKeyWindow })?.rootViewController else {
        return nil
    }
    
    // 遍历找到最顶层的presented控制器
    var topController = rootVC
    while let presentedVC = topController.presentedViewController {
        topController = presentedVC
    }
    
    return topController
}

方案2:UIApplication扩展封装

更符合Swift编码风格的方式是封装成UIApplication的扩展:

import UIKit

extension UIApplication {
    var topViewController: UIViewController? {
        guard let activeScene = connectedScenes.first(where: {
            $0.activationState == .foregroundActive
        }) as? UIWindowScene else {
            return nil
        }
        
        guard let rootVC = activeScene.windows.first(where: { $0.isKeyWindow })?.rootViewController else {
            return nil
        }
        
        var topController = rootVC
        while let presentedVC = topController.presentedViewController {
            topController = presentedVC
        }
        
        return topController
    }
}

在SwiftUI中使用

无论哪种方案,都可以直接在SwiftUI的视图逻辑中调用:

struct ContentView: View {
    var body: some View {
        Button("获取顶层控制器") {
            // 使用工具函数
            if let topVC = getTopViewController() {
                print("顶层控制器:\(topVC)")
            }
            
            // 或者使用扩展属性
            if let topVC = UIApplication.shared.topViewController {
                print("顶层控制器:\(topVC)")
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者Pranit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 23:28:22