Ios 如何从应用程序代理获取打开的视图
我想在用户退出应用程序时产生一些功能 我在appDelegate文件中找到了ApplicationIdentinterBackground函数,但我无法访问当前打开的view controller,因此无法访问所需的函数 我不能使用InstanceViewController函数,因为它创建了一个新函数,但我需要存储在已打开的视图中的信息Ios 如何从应用程序代理获取打开的视图,ios,swift,xcode,Ios,Swift,Xcode,我想在用户退出应用程序时产生一些功能 我在appDelegate文件中找到了ApplicationIdentinterBackground函数,但我无法访问当前打开的view controller,因此无法访问所需的函数 我不能使用InstanceViewController函数,因为它创建了一个新函数,但我需要存储在已打开的视图中的信息 有什么方法可以调用已经打开的view controller实例的函数吗?我有时也有类似的要求,所以我用一个静态方法做了一个UIViewController扩展
有什么方法可以调用已经打开的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?
视图控制器的变量是可选的,所以当应用程序从其他视图控制器输入后台时,我用“?”符号将其展开,并且没有问题欢迎使用堆栈溢出。你的问题不是很清楚。您可以添加一些代码来显示您正在尝试执行的操作吗?