Mam ten ContentView z dwoma różnymi widokami modalnymi, więc używam sheet(isPresented:)
dla obu, ale jak się wydaje, tylko ostatni jest prezentowany. Jak mogę rozwiązać ten problem? A może nie można używać wielu arkuszy w widoku w SwiftUI?
struct ContentView: View {
@State private var firstIsPresented = false
@State private var secondIsPresented = false
var body: some View {
NavigationView {
VStack(spacing: 20) {
Button("First modal view") {
self.firstIsPresented.toggle()
}
Button ("Second modal view") {
self.secondIsPresented.toggle()
}
}
.navigationBarTitle(Text("Multiple modal view problem"), displayMode: .inline)
.sheet(isPresented: $firstIsPresented) {
Text("First modal view")
}
.sheet(isPresented: $secondIsPresented) {
Text("Only the second modal view works!")
}
}
}
}
Powyższy kod kompiluje się bez ostrzeżeń (Xcode 11.2.1).
swift
modal-dialog
swiftui
turingtested
źródło
źródło
Odpowiedzi:
Spróbuj poniżej kodu
źródło
Twoja sprawa może zostać rozwiązana w następujący sposób (testowane z Xcode 11.2)
źródło
Można także dodać arkusz do EmptyView umieszczonego w tle widoku. Można to zrobić wiele razy:
źródło
Możesz to zrobić po prostu grupując przycisk i wywołania .sheet razem. Jeśli masz jedną wiodącą i jedną końcową, jest to takie proste. Jeśli jednak masz wiele pasków nawigacyjnych na początku lub na końcu, musisz owinąć je w HStack, a także owinąć każdy przycisk wywołaniem arkusza w VStack.
Oto przykład dwóch końcowych przycisków:
źródło
Oprócz odpowiedzi Rohita Makwany znalazłem sposób na wyodrębnienie zawartości arkusza do funkcji, ponieważ kompilator z trudem sprawdzał mój gigantyczny typ
View
.Możesz użyć tego w ten sposób:
Sprawia, że kod jest czystszy, a także odciąża kompilator.
źródło