Я создал новый Проект раскадровки в Xcode11 и пытаюсь представить ViewController из пользовательского класса , как это (что прекрасно работает в старом проекте):
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let vc : UIViewController = storyboard.instantiateViewController(withIdentifier: "NotificationVC") as UIViewController
appDelegate.window?.makeKeyAndVisible()
appDelegate.window?.rootViewController?.present(vc, animated: true, completion: nil)
Конечно, теперь это не работает, потому что в AppDelegate больше нет оконной переменной, которая была бы перемещена в SceneDelegate.
Ошибка: Value of type 'AppDelegate' has no member 'window'
Как бы вы заставили этот код работать сейчас?
Что я пытаюсь сделать:
Я пытаюсь показать ViewController, когда пользователь нажимает / нажимает на лоток push-уведомлений.
РЕДАКТИРОВАТЬ: На данный момент я смог заставить его работать, создав частную статическую переменную в SceneDelegate и получив доступ к этой переменной в моем пользовательском классе:
SceneDelegate.swift
private(set) static var shared: SceneDelegate?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let _ = (scene as? UIWindowScene) else { return }
Self.shared = self
}
CustomClass.swift
let sceneDeleage = SceneDelegate.shared
let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let vc : UIViewController = storyboard.instantiateViewController(withIdentifier: "NotificationVC") as UIViewController
sceneDeleage?.window?.makeKeyAndVisible()
sceneDeleage?.window?.rootViewController?.present(vc, animated: true, completion: nil)
Что, вероятно, не рекомендуется, как указано здесь: https://stackoverflow.com/a/58547992/9511942,, но работает
РЕДАКТИРОВАТЬ 2: Вот еще одно мое решение благодаря https://stackoverflow.com/a/58557634/9511942
let window = UIApplication.shared.windows.first
let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let vc : UIViewController = storyboard.instantiateViewController(withIdentifier: "NotificationVC") as UIViewController
window?.makeKeyAndVisible()
window?.rootViewController = vc
Если кто-то найдет лучшее решение, пожалуйста, поделитесь.