Я пытаюсь открыть указанный c контроллер просмотра при нажатии кнопки в расширении сегодня, но не могу его показать. Основное приложение правильно открывается на основном контроллере root с использованием схемы URL, но не с конкретным контроллером c представления, который я установил в App Delegate.
Я пробовал ВСЕ учебники и ответы, которые я мог найти в Google, например: Как открыть Specifi c Контроллер просмотра на виджетах / Сегодня нажмите
, но я не могу заставить его работать. Я попытался выяснить, в чем проблема, и я думаю, что метод делегата приложения не вызывает. Я написал несколько методов print (), но ни один из них не появился в консоли. Я правильно настроил схему URL-адресов, как в ответах по приведенной выше ссылке, поэтому я не знаю, почему метод в App Delegate не выполняется.
Надеюсь, у кого-то есть подсказка, что еще я могу попробовать.
Код из Button IBAction в TodayViewController:
@IBAction func addButtonOnePressed(_ sender: UIButton) {
let url = URL(string: "OpenURL://")!
self.extensionContext?.open(url, completionHandler: nil)
}
Код из метода делегирования приложения (я перепробовал все, что смог найти из них):
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool
{
if url.scheme == "OpenURL"
{
let storyboard = UIStoryboard(name: "Groups", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "Group") as! MasterViewController
self.window?.rootViewController = vc
self.window?.makeKeyAndVisible()
}
return true
}
ОБНОВЛЕНИЕ: Решил сам. Мне нужно делать все в SceneDelegate, а не в AppDelegate, и заботиться о контроллере панели вкладок и контроллере навигации.
Новый код в SceneDelegate.swift:
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: "Group") as? MasterViewController,
let tabBarController = rootViewController as? UITabBarController,
let navController = tabBarController.selectedViewController as? UINavigationController {
navController.pushViewController(rootVC, animated: true)
}
}
}
}