SwiftUI close view dismiss schließen

VonTobias Stephan

SwiftUI close view dismiss schließen

Wenn Du eine SwiftUI-Ansicht mit Hilfe eines Blattes anzeigst, ist es üblich, dass Du diese View schliessen möchtest , wenn etwas passiert – wenn der Benutzer z.B. auf eine Schaltfläche tippt. Es gibt zwei Möglichkeiten, dies in Swift zu lösen, und ich werde Dir beide zeigen, damit Du entscheiden kannst, welche Deinen Bedürfnissen entspricht.

Die erste Möglichkeit besteht darin, der Ansicht zu sagen, dass sie sich selbst verwerfen soll, indem sie ihren Darstellungsstatus ändert. Dazu fügen Sie zunächst eine neue Umgebungseigenschaft zu der Ansicht hinzu, die Du schliessen möchtest:

@Environment(\.presentationMode) var presentationMode

Mit folgender Zeile schliesst Du dann schlussendlich die View:

self.presentationMode.wrappedValue.dismiss()

Die andere Möglichkeit besteht darin, eine Bindung in die gezeigte View zu übergeben, so dass der Wert der Bindung wieder auf „false“ geändert werden kann.

Wenn Du z.B. ViewA mit einer @State-Eigenschaft wie dieser hatten:

@State var showingNewUserView = false

Du kannst Deine NewUserView mit einem Sheet wie diesem präsentieren:

.sheet(isPresented: $showingNewUserView) {
    NewUserView()
}

Bei der Verwendung des Bindungsansatzes für das Verwerfen einer View würden Du Deine Zielansicht – die als Sheet angezeigt wurde – so modifizieren, dass sie eine Bindung desselben Typs hat, der für die Präsentation der View verwendet wurde.

In unserem obigen Beispiel haben wir das Sheet präsentiert, als die View von NewUserView den Wert true hatte, also müssten wir eine boolesche Bindung zu NewUserView hinzufügen, wie hier:

@Binding var isPresented: Bool

Wenn Du möchtest, dass NewUserView sich selbst beendet, setze einfach isPresent zurück auf false, so wie hier:

self.isPresented = false

Nun zum wichtigen Teil: Wenn Du Deine Zielansicht (in diesem Beispiel NewUserView) erstellst, musst Du diesen Datenfluss als Teil Deines Initialisierers übergeben, damit Swift weiß, mit welchem Booleschen es arbeitet.

Du könntest also Deinen bisherigen Sheet-Code durch diesen ersetzen:

.sheet(isPresented: $showingNewUserView) {
    NewUserView(isPresented: self.$showingNewUserView)
}

Bei diesem Ansatz veranlasst SwiftUI diese beiden Ansichten, denselben booleschen Wert zu lesen und zu schreiben, d.h. wenn NewUserView den booleschen Wert wieder auf „false“ setzt, wird das Blatt automatisch ausgeblendet.

Über den Autor

Tobias Stephan administrator

Schreibe eine Antwort