Avatar ·

如何获取iOS应用屏幕上最顶层的UIViewController?

大家好!我正在用Swift编写我的第一个iOS应用,遇到了一个问题。我有几个模态窗口(UIAlertController、UIImagePickerController和自定义的视图控制器),它们有时会相互叠加打开。我需要以编程方式获取当前位于层次结构最顶层的控制器引用,以便例如显示新的alert或检查是否已有模态屏幕打开。 我尝试过使用`UIApplication.shared.keyWindow?.rootViewController`,但这只能获取根控制器,而不是当前可见的控制器。如果我打开一个模态控制器,rootViewController不会改变。我尝试过递归遍历`presentedViewController`,但这并不总是有效,尤其是在有UINavigationController或UITabBarController的情况下。 以下是我的代码示例,它并不总是能正确找到控制器: ```swift func getTopViewController() -> UIViewController? { if var topController = UIApplication.shared.keyWindow