SwiftUI - представление представления поверх текущего представления из AppDelegate - PullRequest
0 голосов
/ 03 марта 2020

Я работаю над проектом, который в какой-то момент получает notification. Когда это произойдет, мне нужно показать View. Я не могу поймать notification с любого View, поэтому я ищу способ изменить его для управления извне View структурами. После того, как цель View выполнена, мне нужно отменить ее там, где остановилось приложение. Думайте, как собственное поведение при активном вызове.

Я думал, что смогу использовать sheet, однако я не мог найти способ вызвать его для каждого View, который мог бы быть активным, когда notifications приходить. Или, может быть, попытка расширить нативный класс View будет работать, но опять же, не повезло найти учебник.

Любая помощь будет оценена.

1 Ответ

1 голос
/ 03 марта 2020

Просто обновите вашу модель на основе уведомления. Нет необходимости определять .sheet (модальное представление) везде в вашей иерархии представлений. Этого достаточно в представлении root.

Чтобы продемонстрировать, что (копирование - вставка - запуск) я создаю небольшой проект, в котором я имитирую уведомление c с помощью SwiftUI Toggle.

import SwiftUI

class Model: ObservableObject {
    @Published var show = false
}
struct SubView: View {
    @EnvironmentObject var model: Model
    var tag: Int
    var body: some View {
        VStack {
            NavigationLink(destination: SubView(tag: tag + 1).environmentObject(model)) {
                Text("subview \(tag)")
            }
            if tag == 2 {
                Toggle(isOn: $model.show) {
                    Text("toggle")
                }.padding()
            }
        }.navigationBarTitle("subview \(tag)")
    }
}
struct ContentView: View {
    @ObservedObject var model = Model()
    var body: some View {
        NavigationView {
            SubView(tag: 0).environmentObject(model)
        }.sheet(isPresented: $model.show) {
            Text("sheet")
        }
    }
}

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

с результатом

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...