Bonjour, Je fais face à un problème avec le NavigationLink de mon appli : il y a plusieurs boutons de navigation sur ma vue, auxquels j'ai attribués, à chacun, une vue de destination. Mais lorsque je clique sur l'un ou l'autre des boutons, la vue qui m'est renvoyée est aléatoire, et se balade entre toutes les vues de destination, que j'aie pourtant attribuées, une à une, à chaque bouton. Ainsi, en présence de plusieurs boutons et de plusieurs vues de destination, comment faire pour que chaque bouton n'ouvre que sur sa propre vue de destination (et non sur toutes les autres )? J'ai essayé plusieurs méthodes, mais là, je crois bien devoir demander l'aide de la communauté. Merci d'avance ! // // Techniques.swift // Survivre // // Created by LEZIER CHRISTOPHE on 26/08/2022. //
import SwiftUI
struct GrowingButton5: ButtonStyle {
func makeBody(configuration: Configuration) -> some View {
configuration.label
.padding()
.clipShape(Capsule())
.scaleEffect(configuration.isPressed ? 1.2 : 1)
.animation(.easeOut(duration:0.2),
value : configuration.isPressed)
}
}
struct Accueil: View {
@State var isOn = false
var body: some View {
NavigationView {
ScrollView {
VStack {
Group {
Text("SURVIVING")
.font(.largeTitle)
Text("THE TWENTY-FIRST")
.font(.title)
Text("CENTURY")
.font(.title)
Spacer()
Text("Petite Application de Survie")
.font(.title3)
VStack {
NavigationLink(destination : Main(), isActive : $isOn){EmptyView()}
Button(
action:{
if isOn == false {
isOn = true
}else{
isOn = false
}
},
label :{
Image("Surviving_Horizontal 5")
.resizable()
.aspectRatio(contentMode: .fill)
.frame(width: 150, height: 150)
.padding(.top)
})
}
Text("A l'usage des Honnêtes Gens")
.font(.title3)
VStack {
NavigationLink(destination: Presentation(), isActive : $isOn, label: {
Button(
action:{
if isOn == false {
isOn = true
}else{
isOn = false
}
},
label :{
Image("Chapeau")
.resizable()
.aspectRatio(contentMode: .fill)
.frame(width: 100, height: 90)
})
})
}
Text("PRESENTATION")
.font(.title3)
}
Group {
Spacer()
VStack {
NavigationLink(destination: Reperes(), isActive : $isOn, label: {
Button(
action:{
if isOn == false {
isOn = true
}else{
isOn = false
}
},
label :{
Image("Reperes")
.resizable()
.aspectRatio(contentMode: .fill)
.frame(width: 80, height: 80)
.padding(.bottom)
})
})
}
Text("REPERES")
.font(.title3)
Spacer()
VStack {
NavigationLink(destination: Ressources(), isActive : $isOn, label: {
Button(
action:{
if isOn == false {
isOn = true
}else{
isOn = false
}
},
label :{
Image("Ressources")
.resizable()
.aspectRatio(contentMode: .fill)
.frame(width: 90, height: 60)
})
})
}
Text("RESSOURCES")
.font(.title3)
}
Group {
Spacer()
VStack {
NavigationLink(destination: Techniques(), isActive : $isOn, label: {
Button(
action:{
if isOn == false {
isOn = true
}else{
isOn = false
}
},
label :{
Image("Technique")
.resizable()
.aspectRatio(contentMode: .fill)
.frame(width: 90, height: 80)
})
})
Text("TECHNIQUES")
.font(.title3)
}
Spacer()
Spacer()
VStack {
NavigationLink(destination: Bonus(), isActive : $isOn, label: {
Button(
action:{
if isOn == false {
isOn = true
}else{
isOn = false
}
},
label :{
Image("Bonus")
.resizable()
.aspectRatio(contentMode: .fill)
.frame(width: 80, height: 70)
})
})
Text("BONUS")
.font(.title3)
}
}.frame(width: 300, height: 50, alignment: .center)
}.buttonStyle(GrowingButton5())
.buttonStyle(PlainButtonStyle())
}
} } }
struct Accueil_Previews: PreviewProvider { static var previews: some View { Accueil()
.previewInterfaceOrientation(.portraitUpsideDown)
}
}
Merci Claude31 pour ton aide Le problème ne venait pas du isOn (que j'ai bien sûr mis dans une fonction, afin d'alléger le script), il s'agissait du NavigationLink qui me renvoyait aléatoirement les vues de destination de plusieurs boutons. J'ai résolu le problème à l'instant en : -créant un enum NavigationItem{ case XXXX case XXY }
- créant un @State var navigatedItem: NavigationItem? = .XXXX
- en liant le navigationLink : NavigationLink(destination: XXXX(), tag : NavigationItem.XXXX, selection: $navigatedItem){EmptyView()}
Le tout fonctionne à présent comme souhaité. (Ouf!)