Swift Open указывает c контроллер просмотра с помощью кнопки в расширении today - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь открыть указанный 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)
                }
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...