Swift - 从AppDelegate向View Controller添加子视图

知是行的主意,行是知的功夫。这篇文章主要讲述Swift - 从AppDelegate向View Controller添加子视图相关的知识,希望能为你提供帮助。
我试图在当前显示的AppDelegate上添加来自UIViewController的子视图,我注意到如果UIViewControllerAppDelegate添加子视图时显示警告消息,则子视图将添加到UIAlertController而不是UIViewController。什么是在UIViewController上显示子视图的最佳方式,而不是当前UIViewController可能显示的任何其他子视图?这是我目前的代码。

@objc func showStudentLeftTheTestAlert(notification: NSNotification) { if let userInfo = notification.userInfo { if let visibleVc = self.window?.visibleViewController { // do some other stuff here visibleVc.view.addSubview(StudentLeftTestAlertViewController.sharedInstance.view) } } }

答案问题是,警报信息实际上是在你原来的UIViewController上以模态方式呈现的UIViewController。如果你想要到达顶部的shown视图控制器(而不是presented),你可以将这个方法添加到你的AppDelegate。如果您使用的是导航堆栈,它将返回根视图控制器或顶视图控制器。
func getTopViewController() -> UIViewController? { let rootViewController = self.window?.rootViewControllerif let navigationController = rootViewController as? UINavigationController { // get the top view controller from stack if needed return navigationController.topViewController } else { return rootViewController } }

希望它能帮到你
另一答案如果您想要显示UIViewController,可以添加以下扩展名:
// MARK: UIApplication extension extension UIApplication { // Get top view controller static var topViewController:UIViewController? { get{ if var topController = UIApplication.shared.keyWindow?.rootViewController { while let presentedViewController = topController.presentedViewController { topController = presentedViewController } return topController }else{ return nil } } } }

和使用是这样的:
guard let vc = UIApplication.topViewController else { return }

【Swift - 从AppDelegate向View Controller添加子视图】其中vc是您的顶级控制器,可以是UINavigationController,UITabbarcontroller或您的自定义控制器,所有这些都取决于您的导航流程。

    推荐阅读