Bonjour,
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
j’ai un model Exo qui est une classe Observable comme ceci :
import Foundation
import FirebaseDatabase
class ExoModelFirebase: ObservableObject {
var ref = Database.database().reference()
@Published var exos = [ExoModel]()
func getResultSearch(_ section: String){
self.ref.child("Exercises").queryOrdered(byChild: "pcategory").queryStarting(atValue: section).queryEnding(atValue: section+"\u{f8ff}").observeSingleEvent(of: .value) { snapshot -> Void in
self.exos.removeAll()
for exo in snapshot.children {
let exoSnapshot = exo as! DataSnapshot
let exoArrayData = exoSnapshot.value as? [String:AnyObject]
self.exos.append(ExoModel(pcategory: exoArrayData?["pcategory"] as! String, pdate: exoArrayData?["pdate"] as! String, pheading: exoArrayData?["pheading"] as! String, piconlink: exoArrayData?["piconlink"] as! String, preadcolor: exoArrayData?["preadcolor"] as! String, psimpleblack: exoArrayData?["psimpleblack"] as! String))
}
}
}
}
le composant tag, J’ai esssayer plein de chose mais rien ne fonctionne.
import SwiftUI
struct TagList: View {
@State var tags:[String] = []
@Binding var selectedMenu: String
@ObservedObject var session = ExoModelFirebase()
var body: some View {
ScrollView(.horizontal, showsIndicators: false){
HStack{
ForEach(tags, id: \.self){ m in
Button(action: {
print(m)
session.getResultSearch(m)
session.objectWillChange.send()
}) {
HStack {
Text(m)
}
}
.padding()
.foregroundColor(.white)
.background(Color.orange)
.cornerRadius(20)
.lineLimit(1)
}
}.padding()
}
}
}
La vue
import SwiftUI
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 à 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.
Merci d’avance