[英]Swift how to open specific viewcontroller from today extension when main app is not open
I have created a today extension with some UIButtons and I want to open a specific view controller when the user taps a button.我用一些 UIButtons 创建了一个今天的扩展,我想在用户点击一个按钮时打开一个特定的视图控制器。 It works right now when the main app is open, but when it is closed then it will only open the main app and dont navigate to my specific view controller.
当主应用程序打开时它现在可以工作,但是当它关闭时它只会打开主应用程序并且不会导航到我的特定视图控制器。
What I have done: I have set up the URL Sheme and wrote the OpenURL Code if button is pressed in TodayExtension View Controller .我所做的:如果在TodayExtension View Controller 中按下按钮,我已经设置了 URL Sheme 并编写了 OpenURL 代码。
@objc func buttonClick(sender: UIButton) {
let tag = sender.tag
if let url = URL(string: "OpenURL://\(tag)")
{
self.extensionContext?.open(url, completionHandler: nil)
}
}
In SceneDelegate I wrote the code to navigate to specific view controller in func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
在SceneDelegate 中,我编写了代码以导航到
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
特定视图控制器
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
if let url = URLContexts.first?.url {
if url.scheme == "OpenURL" {
guard let rootViewController = (UIApplication.shared.connectedScenes.first?.delegate as? SceneDelegate)?.window?.rootViewController else {
return
}
let storyboard = UIStoryboard(name: "Groups", bundle: nil)
if let rootVC = storyboard.instantiateViewController(withIdentifier: "Create") as? CreateSingleGroupViewController,
let tabBarController = rootViewController as? UITabBarController,
let navController = tabBarController.selectedViewController as? UINavigationController {
navController.pushViewController(rootVC, animated: true)
rootVC.buttonTag = Int(url.host!)
}
}
}
}
But like i said this only works when the main app is opened before.但就像我说的那样,这只适用于之前打开主应用程序的情况。 What do I have to do that this works even if the main ap is closed?
即使主 ap 关闭,我该怎么做才能正常工作?
With the help from Google I figured out that I have to set up the func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
function but I dont know how.在谷歌的帮助下,我发现我必须设置
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
功能,但我不知道如何。 What I have wrote is我写的是
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let _ = (scene as? UIWindowScene) else { return }
self.scene(scene, openURLContexts: connectionOptions.urlContexts)
}
but this dont work.但这不起作用。
Hope someone can help me.希望可以有人帮帮我。
Finally I solved my problem.最后我解决了我的问题。
I had to add a line in scene willConnectTo.. function:我不得不在场景 willConnectTo.. 函数中添加一行:
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let _ = (scene as? UIWindowScene) else { return }
if let url = connectionOptions.urlContexts.first?.url {
UIApplication.shared.open(url)
self.scene(scene, openURLContexts: connectionOptions.urlContexts)
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.