Bonjour, J'ai un problème avec ma liste. La fonction "searchable" fonctionne très bien lorsque la liste est simple et ne contient ni boutons, ni NavigationLink, mais une fois ceux-ci inclus, la barre de recherche ne filtre plus la liste. Si vous avez une solution... Merci de votre aide !
Voici une version du code qui semble faire ce que tu attends:
Il faudra voir comment calculer les images et les tag, si tu en as besoin quelque part.
import SwiftUI
struct Aubepine: View { // <<-- Pour le test
var body: some View {
Text("Aubepine")
}
}
struct Bouleau: View { // <<-- Pour le test
var body: some View {
Text("Bouleau")
}
}
struct Charme: View { // <<-- Pour le test
var body: some View {
Text("Charme")
}
}
struct Chataignier: View { // <<-- Pour le test
var body: some View {
Text("Chataignier")
}
}
struct Chene: View { // <<-- Pour le test
var body: some View {
Text("Chene")
}
}
struct Tilleul: View { // <<-- Pour le test
var body: some View {
Text("Tilleul")
}
}
struct ListeArbres: View {
var image : String = ""
@State private var searchText = ""
@State var isOn = false
func test()->Bool {
return !isOn
}
var Arbres = [
"Aubépine",
"Bouleau",
"Charme",
"Châtaignier",
"Chêne",
"Tilleul" ]
enum NavigationItem {
case Aubepine
case Bouleau
case Charme
case Chataignier
case Chene
case Tilleul
}
func tag(for arbre: String) -> NavigationItem {
switch arbre {
case "Aubépine" : return .Aubepine
case "Bouleau" : return .Bouleau
case "Charme" : return .Charme
case "Châtaignier":return .Chataignier
case "Chêne" : return .Chene
case "Tilleul" : return .Tilleul
default: return .Aubepine // To have something
}
}
@State var navigatedItem: NavigationItem?
var filteredNames: [String] { // <<-- déplacé
if searchText.isEmpty {
return Arbres
} else {
return Arbres.filter {
$0.contains(searchText)
}
}
}
@ViewBuilder func destination(to arbre: String) -> some View {
switch arbre {
case "Aubépine":
Aubepine()
case "Bouleau":
Bouleau()
case "Charme":
Charme()
case "Châtaignier":
Chataignier()
case "Chêne":
Chene()
case "Tilleul":
Tilleul()
default:
EmptyView()
}
}
var body: some View {
NavigationView {
List (filteredNames, id:\.self) { arbre in
Group {
VStack {
NavigationLink(destination: destination(to: arbre), tag: tag(for: arbre), selection: $navigatedItem) { EmptyView() }
Button(
action: { isOn = test() },
label : {
HStack (spacing: 50){
Image("aubepine fruit")
.resizable()
.scaledToFit()
.frame( height: 70)
.position(x: 40, y: 30)
.padding(.vertical,4)
Text(arbre)
.font(.title)
.position(x: -20, y: 30)
}
})
}
/* SUPPRIMER
VStack {
NavigationLink(destination: destination(to: arbre), tag: NavigationItem.Bouleau, selection: $navigatedItem){EmptyView()}
Button(
action: {
// <<-- Quelle est l'action ?
print("No action")
},
label: {
VStack { NavigationLink(destination: Tilleul(), tag: NavigationItem.Tilleul, selection: $navigatedItem){EmptyView()}
Button( action: { isOn = test() },
label :{
HStack (spacing: 50){
Image("tilleul feuille")
.resizable()
.scaledToFit()
.frame(height: 70)
.position(x: 50, y: 30)
.padding(.vertical,4)
Text("Tilleul")
.font(.title)
.position(x: -20, y: 30)
}
})
}
}// <<-- Manque ici ?
) // <<-- Manque ?
/* SUPPRIMER VStack {
} */
.navigationBarTitleDisplayMode(.inline)
.buttonStyle(PlainButtonStyle() )
}*/
} .searchable(text: $searchText, prompt: "Chercher")
.navigationTitle("Arbres à connaître")
.frame(width: 400)
} // End List
}
}
} // <<-- Manque
struct ListeArbres_Previews: PreviewProvider {
static var previews: some View {
ListeArbres()
}
} // <<-- Manque