J'ai un ContentView écrit en swiftUI aussi simple que ci-dessous. '' 'corps var: certains Voir {
NavigationView {
List {
Section {
PresentationLink(destination: Text("new Profile")) {
Text("new Profile")
}
}
}
}
'' '
tout va bien la première fois que je tape sur un nouveau profil mais quand je ferme le modal et réessaye de taper, ça ne marche pas. Est-ce un bug ou une fonctionnalité?
PresentationLink a été déconseillé dans Xcode 11 beta 4 en faveur de .sheet, ce qui semble résoudre le problème.
Ajout de modificateurs de présentation améliorés: feuille (isPresented: onDismiss: content :), actionSheet (isPresented: content :) et alert (isPresented: content :) - avec isPresented dans l'environnement - remplacez la présentation existante (_ :), Sheet, Types Modal et PresentationLink. (52075730)
Si vous changez le code en .sheet comme ci-dessous:
import SwiftUI
struct Testing : View {
@State var isPresented = false
var body: some View {
NavigationView {
List {
Button(action: { self.isPresented.toggle() })
{ Text("Source View") }
}
}.sheet(isPresented: $isPresented, content: { Text("Destination View") })
}
}
Vous pourrez alors utiliser le modal autant de fois que vous le souhaitez au lieu d'une seule fois.
EDIT: Après avoir implémenté cela dans un scénario réel, j'ai constaté que le bogue sous-jacent semble toujours exister si vous mettez .sheet
à l'intérieur du List
. Si vous suivez l'exemple de code ci-dessus, vous ne rencontrerez pas ce problème mais dans un scénario réel où vous utilisez un List
, vous voudrez probablement que des informations sur l'élément particulier qui a été sélectionné soient transmises au modal. Dans ce cas, vous devrez transmettre des informations sur la sélection via un @State
var ou un autre moyen. Voici un exemple:
import SwiftUI
struct Testing : View {
@State var isPresented = false
@State var whichPresented = -1
var body: some View {
NavigationView {
List {
ForEach(0 ..< 10) { i in
Button(action: {
self.whichPresented = i
self.isPresented.toggle()
})
{ Text("Button \(i)") }
}
}
}.sheet(isPresented: $isPresented, content: { Text("Destination View \(self.whichPresented)") })
}
}