Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何从应用程序代理获取打开的视图_Ios_Swift_Xcode - Fatal编程技术网

Ios 如何从应用程序代理获取打开的视图

Ios 如何从应用程序代理获取打开的视图,ios,swift,xcode,Ios,Swift,Xcode,我想在用户退出应用程序时产生一些功能 我在appDelegate文件中找到了ApplicationIdentinterBackground函数,但我无法访问当前打开的view controller,因此无法访问所需的函数 我不能使用InstanceViewController函数,因为它创建了一个新函数,但我需要存储在已打开的视图中的信息 有什么方法可以调用已经打开的view controller实例的函数吗?我有时也有类似的要求,所以我用一个静态方法做了一个UIViewController扩展

我想在用户退出应用程序时产生一些功能

我在appDelegate文件中找到了ApplicationIdentinterBackground函数,但我无法访问当前打开的view controller,因此无法访问所需的函数 我不能使用InstanceViewController函数,因为它创建了一个新函数,但我需要存储在已打开的视图中的信息


有什么方法可以调用已经打开的view controller实例的函数吗?

我有时也有类似的要求,所以我用一个静态方法做了一个
UIViewController
扩展来返回“top”viewController。看起来是这样的:

extension UIViewController {

    static func topViewController(_ viewController: UIViewController? = nil) -> UIViewController? {
        let viewController = viewController ?? UIApplication.shared.keyWindow?.rootViewController
        if let navigationController = viewController as? UINavigationController, !navigationController.viewControllers.isEmpty {
            return self.topViewController(navigationController.viewControllers.last)
        } else if let tabBarController = viewController as? UITabBarController,
            let selectedController = tabBarController.selectedViewController {
            return self.topViewController(selectedController)
        } else if let presentedController = viewController?.presentedViewController {
            return self.topViewController(presentedController)
        }
        return viewController
    }

}
这允许您通过调用
let top:UIViewController?=UIViewController.topViewController()

我找到了一些方法 我很确定这是一种非常愚蠢的方式,但它在我的情况下起作用,因为我确切地知道我需要哪个视图控制器

第一步:在appDelegate类中创建变量

class AppDelegate: UIResponder, UIApplicationDelegate {

var myViewController:ExampleViewController?
第二步:在myViewController类中

override func viewDidLoad() {
    super.viewDidLoad()
    let delegate = UIApplication.shared.delegate as! AppDelegate
    delegate. myViewController = self       
}
现在我可以从AppDelegate类调用myViewController类的任何函数

class AppDelegate: UIResponder, UIApplicationDelegate {

var myViewController:ExampleViewController?

视图控制器的变量是可选的,所以当应用程序从其他视图控制器输入后台时,我用“?”符号将其展开,并且没有问题

欢迎使用堆栈溢出。你的问题不是很清楚。您可以添加一些代码来显示您正在尝试执行的操作吗?