SwiftUI - настоящее модальное через ContextMenu - PullRequest
1 голос
/ 28 февраля 2020

В настоящее время я пытаюсь представить модальный вид, нажав кнопку в контекстном меню. Это работает, но код, который должен представлять модальное представление, вызывается дважды, и это является проблемой, потому что я вызываю некоторые сетевые запросы.

Вот мой демонстрационный проект (без сетевого взаимодействия):

Это представление, которое вызывается при запуске приложения.

struct ContentView: View {
    @State var isModal: Bool = false

    var body: some View {
        Group {
            Text("Main view")
        }.contextMenu {
            Button("Present Detail") { self.isModal = true }.sheet(isPresented: $isModal) {
                DetailView()
            }
        }
    }
}

Это простое подробное представление

struct DetailView: View {
    var body: some View {
        Text("Detail View")
    }
}

Так что, если я размещу точку останова на линии, где DetailView() создается, я вижу, что эта часть вызывается дважды. Есть ли лучшее решение для представления модального вида без многократного создания экземпляра?

1 Ответ

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

Используйте вместо

var body: some View {
    Group {
        Text("Main view")
    }.contextMenu {
        Button("Present Detail") { self.isModal = true }
    }.sheet(isPresented: $isModal) {
        DetailView()
    }
}
...