如何从 appdelegate xcode 11 swift 5 呈现视图控制器
Posted
技术标签:
【中文标题】如何从 appdelegate xcode 11 swift 5 呈现视图控制器【英文标题】:How to present a view controller from appdelegate xcode 11 swift 5 【发布时间】:2020-04-05 22:03:38 【问题描述】:我整天都在寻找如何在 appdelegate 中呈现视图控制器。看来,在 xcode 11 中,window 属性已移至让我感到困惑的场景代理。我想从 didReceiveRemoteNotification 函数的 appdelegate 中呈现一个视图控制器,这样当用户收到通知时,它会将他们带到带有信息的单独视图控制器。我已经尝试过:
self.window?.rootViewController?.present(LoginViewController(), animated: false, completion: nil)
在我以前的应用程序中曾经工作过的 appdelegate 中,但它似乎不再工作了。任何帮助将不胜感激。
【问题讨论】:
困难的部分是呈现视图控制器,还是接收远程通知? 您可以从UIApplication
对象中获取connectedScenes
。您需要选择一个来显示新的视图控制器。
困难的部分是呈现视图控制器。我能够收到通知。
【参考方案1】:
我能够通过使用共享窗口从 scenedelegate 获取窗口以呈现视图控制器来解决此问题。
UIApplication.shared.windows.first?.rootViewController?.present(vc, animated: false, completion: nil)
【讨论】:
【参考方案2】:通过应用程序委托呈现视图控制器的最佳方法是不落入如下层次结构:
if let vc = UIStoryboard(name: "YOURSTORYBOARD", bundle: nil).instantiateViewController(withIdentifier: "YOURVIEWCONTROLLER") as? YOURVIEWCONTROLLER
if let window = self.window, let rootViewController = window.rootViewController
var currentController = rootViewController
while let presentController = currentController.presentedViewController
currentController = presentController
currentController.present(vc, animated: true, completion: nil)
【讨论】:
我没有使用故事板。 @KushalShrestha 我很高兴,它帮助了你。以上是关于如何从 appdelegate xcode 11 swift 5 呈现视图控制器的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Xcode 11 中启动没有故事板 >= iOS 13 的新项目?
如何从 Xcode 中的 AppDelegate.m 文件更新 UILabel 的文本?
Xcode & Swift - 无法从 AppDelegate 实例化另一个视图控制器
Xcode 11 beta:AppDelegate 文件没有窗口全局变量
AppDelegate Touch3D Xcode - TabBar
XCODE 11 - 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[AppDelegate 窗口]: