返回

iOS小技巧:如何轻松获取当前显示的控制器

IOS

如何获取 iOS 应用程序中当前显示的控制器:6 种常用方法

在 iOS 应用程序开发中,获取当前正在显示的控制器是许多场景的常见需求,例如电子签名、更新界面信息和添加调试信息等。了解不同的方法可以帮助我们灵活地根据应用程序的特定需求来选择合适的解决方案。

1. 使用 UIApplication

UIApplication 代表了整个应用程序,我们可以通过它的 keyWindow 属性来获取当前显示的窗口。然后,通过窗口的 rootViewControllerpresentedViewController 属性,就可以获得当前显示的控制器。

let application = UIApplication.shared
let window = application.keyWindow
let rootViewController = window?.rootViewController
let presentedViewController = rootViewController?.presentedViewController

2. 使用 UIResponder

UIResponder 是所有能够响应事件的对象的基类。我们可以通过 UIRespondernextResponder 属性来遍历响应者链,直到找到当前显示的控制器。

var responder: UIResponder? = UIApplication.shared.keyWindow
while responder != nil {
    if let viewController = responder as? UIViewController {
        return viewController
    }
    responder = responder?.next
}

3. 使用 UINavigationController

UINavigationController 是一个容器控制器,用于管理视图控制器的堆栈。我们可以通过 UINavigationControllertopViewController 属性来获取当前显示的控制器。

if let navigationController = self.window?.rootViewController as? UINavigationController {
    let topViewController = navigationController.topViewController
}

4. 使用 UITabBarController

UITabBarController 是一个容器控制器,用于管理选项卡视图控制器的集合。我们可以通过 UITabBarControllerselectedViewController 属性来获取当前显示的控制器。

if let tabBarController = self.window?.rootViewController as? UITabBarController {
    let selectedViewController = tabBarController.selectedViewController
}

5. 使用 UIPageViewController

UIPageViewController 是一个容器控制器,用于管理页面视图控制器的集合。我们可以通过 UIPageViewControllerviewControllers 属性来获取当前显示的控制器。

if let pageViewController = self.window?.rootViewController as? UIPageViewController {
    let currentViewController = pageViewController.viewControllers?[0]
}

6. 使用 UISplitViewController

UISplitViewController 是一个容器控制器,用于管理两个视图控制器。我们可以通过 UISplitViewControllerviewControllers 属性来获取当前显示的控制器。

if let splitViewController = self.window?.rootViewController as? UISplitViewController {
    let primaryViewController = splitViewController.viewControllers[0]
    let detailViewController = splitViewController.viewControllers[1]
}

结论

了解这 6 种获取当前显示控制器的不同方法,让我们能够灵活地选择最适合特定应用程序需求的方法。通过结合实际使用场景和代码示例,我们希望本文能帮助您更好地掌握在 iOS 应用程序开发中获取当前显示控制器的技巧。

常见问题解答

Q1:我可以在 SwiftUI 中使用这些方法吗?
A1: 是的,这些方法与 SwiftUI 兼容。

Q2:是否有更简单的方法来获取当前显示的控制器?
A2: 上述方法是获取当前显示控制器的常用方法,没有更简单的方法。

Q3:我无法获取当前显示的控制器,是怎么回事?
A3: 请确保您使用了正确的根控制器并验证应用程序的导航结构是否正确。

Q4:如何获取根控制器?
A4: 可以通过 UIApplicationkeyWindow 属性获取根控制器。

Q5:如何获取呈现的控制器?
A5: 可以通过根控制器的 presentedViewController 属性获取呈现的控制器。