Я хочу нажать на уведомление pu sh, чтобы открыть определенный экран c в SwiftUI - PullRequest
0 голосов
/ 15 апреля 2020

Я использую SwiftUI.

Я хочу открыть указанный c экран, отличный от Root Просмотр, щелкнув уведомление pu sh. Есть несколько способов открыть его с помощью StoryBoard, но не без StoryBoard.

Как мне добиться этого без использования StoryBoard?

Я пытался это , но я начинающий, так что я не знаю.

class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {
    var window: UIWindow?

    func userNotificationCenter(
        _ center: UNUserNotificationCenter,
        willPresent notification: UNNotification,
        withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions)
        -> Void) {
        completionHandler([.alert, .badge, .sound])
    }

    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: () -> Void) {
        // I want to open a screen other than Root View here.
        completionHandler()
    }
    ... }

1 Ответ

0 голосов
/ 15 апреля 2020

В классе AppDelegate объявите глобальную переменную window типа UIWindow как

var window: UIWindow?

. В методах didFinishLaunchingWithOptions проверьте, было ли приложение запущено из модуля запуска, или нажав на кнопку уведомление. Если да, показать новый контроллер представления.

window = UIWindow(frame: UIScreen.main.bounds)
if launchOptions?[UIApplication.LaunchOptionsKey.remoteNotification] != nil {
    // App is launched by clicking on a remote notification
    // Show view controller
    let vc = ViewController()
    window!.rootViewController = vc
    window!.makeKeyAndVisible()
} else {
    // App is launched from the launcher
}

Кроме того, обратите внимание, что метод didFinishLaunchingWithOptions будет вызываться только в том случае, если приложение будет убито, а не в том случае, если приложение будет вновь открыто, пока оно находится в фоновом режиме. Чтобы показать контроллер представления, если уведомление нажимается, когда приложение все еще находится в фоновом режиме, добавьте следующий код в метод userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void).

func userNotificationCenter(_ center: UNUserNotificationCenter,
                              didReceive response: UNNotificationResponse,
                              withCompletionHandler completionHandler: @escaping () -> Void) {
    let userInfo = response.notification.request.content.userInfo
    window = UIWindow(frame: UIScreen.main.bounds)
    let vc = ViewController()
    window!.rootViewController = vc
    window!.makeKeyAndVisible()

    completionHandler()
  }
...