Ich habe diese ContentView mit zwei verschiedenen modalen Ansichten, daher verwende ich sie sheet(isPresented:)
für beide, aber anscheinend wird nur die letzte angezeigt . Wie könnte ich dieses Problem lösen? Oder ist es nicht möglich, mehrere Blätter in einer Ansicht in SwiftUI zu verwenden?
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!")
}
}
}
}
Der obige Code wird ohne Warnungen kompiliert (Xcode 11.2.1).
swift
modal-dialog
swiftui
turingtested
quelle
quelle
Antworten:
Bitte versuchen Sie es mit dem folgenden Code
quelle
Ihr Fall kann wie folgt gelöst werden (getestet mit Xcode 11.2)
quelle
Kann das Blatt auch zu einer leeren Ansicht im Hintergrund der Ansicht hinzufügen. Dies kann mehrmals durchgeführt werden:
quelle
Sie können dies einfach erreichen, indem Sie die Schaltfläche und die .sheet-Aufrufe zusammenfassen. Wenn Sie einen führenden und einen nachfolgenden haben, ist das so einfach. Wenn Sie jedoch mehrere Navigationsleistenelemente entweder im führenden oder im hinteren Bereich haben, müssen Sie diese in einen HStack einschließen und jede Schaltfläche mit ihrem Blattaufruf in einen VStack einschließen.
Hier ist ein Beispiel für zwei nachfolgende Schaltflächen:
quelle
Zusätzlich zu Rohit Makwanas Antwort fand ich eine Möglichkeit, den Blattinhalt in eine Funktion zu extrahieren, da es dem Compiler schwer fiel, meinen Giganten zu überprüfen
View
.Sie können es folgendermaßen verwenden:
Es macht den Code sauberer und entlastet auch Ihren Compiler.
quelle