SwiftUI вкладка и уведомление - PullRequest
0 голосов
/ 24 февраля 2020

Я новичок в SwiftUI и после долгих исследований не могу понять, как изменить вкладку в виде вкладки при получении уведомления.

В настоящее время я использую @Published var selectedTab в наблюдаемом объекте, чтобы изменить свою вкладку.

Это работает очень хорошо, но моя проблема в том, что я хотел бы открыть приложение в определенной вкладке, если Я получаю уведомление.

Как мне связаться из AppDelegate с моим наблюдаемым объектом, чтобы изменить значение selectedTab?

Большое спасибо

Ответы [ 2 ]

0 голосов
/ 24 февраля 2020

Просто определите его в своем представлении (или в вашей модели как значение по умолчанию)!

import SwiftUI

struct HomeView: View {
    let tag: Int
    var body: some View {
        Text("\(tag) Tab selected").font(.largeTitle)
    }
}


struct ContentView: View {
    @State var selection = 2
    var body: some View {

        TabView(selection: $selection) {
            HomeView(tag: selection).tabItem {
                Image(systemName: "house")
                Text("1")
            }.tag(1)

            HomeView(tag: selection).tabItem {
                Image(systemName: "house")
                Text("2")
            }.tag(2)

            HomeView(tag: selection).tabItem {
                Image(systemName: "house")
                Text("3")
            }.tag(3)
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

При создании вторая вкладка выбирается «по умолчанию»

enter image description here

0 голосов
/ 24 февраля 2020

В вашем классе Appdelegate импортируйте SwiftUI.

Затем на pu sh приходит уведомление, используйте этот метод, чтобы показать конкретный вид.

extension AppDelegate {

    func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
        let vc = ContentView.init()
        window?.rootViewController = UIHostingController(rootView:vc)
    }

    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {

    }

    func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {

    }
}
...