Utilisation de l'enveloppe de la propriété @State (recommandé)
struct ContentView: View {
@State private var showModal = false
var body: some View {
Button("Show Modal") {
self.showModal.toggle()
}.sheet(isPresented: $showModal) {
ModalView(showModal: self.$showModal)
}
}
}
struct ModalView: View {
@Binding var showModal: Bool
var body: some View {
Text("Modal view")
Button("Dismiss") {
self.showModal.toggle()
}
}
}
Utilisation de presentationMode
Vous pouvez utiliser presentationMode
dans votre vue modale et en appelant self.presentaionMode.wrappedValue.dismiss()
pour rejeter le modal :
struct ContentView: View {
@State private var showModal = false
// If you are getting the "can only present once" issue, add this here.
// Fixes the problem, but not sure why; feel free to edit/explain below.
@SwiftUI.Environment(\.presentationMode) private var presentationMode: Binding<PresentationMode>
var body: some View {
Button(action: {
self.showModal = true
}) {
Text("Show modal")
}.sheet(isPresented: self.$showModal) {
ModalView()
}
}
}
struct ModalView: View {
@Environment(\.presentationMode) private var presentationMode
var body: some View {
Group {
Text("Modal view")
Button(action: {
self.presentationMode.wrappedValue.dismiss()
}) {
Text("Dismiss")
}
}
}
}
1 votes
Aucun des exemples que j'ai vus n'a de méthode pour rejeter une vue présentée, donc je ne pense pas qu'il y en ait encore une.
0 votes
Je suis presque sûr qu'ils vont l'introduire dans la prochaine version bêta. La méthode Pop est également absente.
2 votes
Je pense qu'il est important de se rappeler que SwiftUI est un changement de paradigme. Nous devons penser davantage en termes d'" état " et moins en termes d'écriture d'instructions conditionnelles, etc. Ainsi, comme d'autres l'ont écrit, il s'agit davantage d'écouter l'état via la fonction
@Environment
ou@State
ou d'autres "Property Wrappers". Il s'agit d'un passage au modèle de l'observateur dans un cadre déclaratif, pour ceux qui aiment les phrases compliquées :-)0 votes
Il y a maintenant une façon très propre de le faire dans la Beta 5. Voir ma réponse ci-dessous. BTW, la même méthode fonctionne pour faire apparaître une vue de navigation.
0 votes
Il semble que dans iOS 15, ils ont introduit exactement ce que vous souhaitiez - la DismissAction . Voir cette réponse .