j’ai crée un composant tag et quand je clique dessus cela dois mêttre à jour la scrollview.
j’utilise firebase pour les datas.
Voici un screen de l’app
Donc à l’init tout fonction bien, c’est au moment ou je clique sur CP par example, et la rien ne se passe.
Je ne sais pas comment dire à l’observable de renvoyé les bonnes datas.
Je pense qu’au lieu d’envoyer ton objet dans ton sous-menu, tu pourrais faire remonter l’info voulue (la catégorie sélectionnée) jusqu’à l’ancêtre commun qui a besoin de l’information. Je crois que c’est ExerciceView dans ton cas.
En utilisant des @Bindings tu peux envoyer juste une variable dans ton menu et quand le menu modifie cette variable, la vue parent saura que la section a changé et peut demander à son modèle de recharger ses données
struct CustomMenu: View {
@State var tags:[String] = []
@Binding var selectedMenu: String
var body: some View {
ScrollView(.horizontal, showsIndicators: false){
HStack{
ForEach(tags, id: \.self){ m in
Button(action: {
selectedMenu = m
}) {
HStack {
Text(m)
}
}
.padding()
.foregroundColor(.white)
.background(Color.orange)
.cornerRadius(20)
.lineLimit(1)
}
}.padding()
}
}
}
la vue principale ou j’ai moment composant du sous-menu et la je récupère bien la binding quand je clique sur le menu.
mais j’ai du mal a visualisé comment faire passer la nouvelle valeur a mon observable et lui dire recharge toi.
struct ExerciseView: View {
@State var showSetting = false
@State var section = ""
//MARK: Properties
@ObservedObject var session = ExoModelFirebase()
var body: some View {
NavigationView{
VStack{
CustomMenu(tags: ["CP", "CE1"], selectedMenu: $section)
ScrollView {
ForEach(self.session.exos){ exo in
ListRowExo(exo: exo)
}
}
}
.navigationTitle("Exercises")
.navigationBarItems(trailing: Button(action: {
self.showSetting.toggle()
}, label: {
Image(systemName: "slider.horizontal.3")
.foregroundColor(.black)
.font(Font.system(size: 30))
}).fullScreenCover(isPresented: $showSetting, content: {
SettingView()
}))
}.onAppear(perform: {
getExos()
print("on appear")
})
}
func getExos() {
session.getResultSearch(section)
}
}
donc je pense mais sur qu'il y a un truc que je fait mal mais je ne sais pas quoi .
merci d'avance.
Je ne suis pas certain pas que le didSet soit appelé quand tu modifies l’intérieur d’une propriété. Si tu remplaçais le tableau d’exos par un nouveau tableau oui, mais dans ton cas tu vides le tableau existant et tu lui redonnes des cases.
Je pense aussi qu’il faudrait plutôt utiliser willSet au lieu de didSet pour appeler objectWillChange
c’est ici la ou je ne vois pas comment le notifié car il faut que je relance ma fonction session.getResultSearch(section) je suis un peut perdu ou alors il faut que j’arrêt de penser en reactJS lol.
ou alors j’ai louper une compréhension d’un concept