Я создаю список, который должен содержать более 100 элементов (в будущем), но выравнивание, похоже, не работает.
На данный момент у меня это...
Я думаю, что это выглядит довольно красиво, но проблема в том, что когда вы щелкаете элемент (неважно, какой), каждый элемент будет щелкнут... Я проверил это с помощью команды печати.
Панель поиска работает довольно хорошо, за исключением того, что она скрывает голову, но сейчас это не проблема.
При поиске элемента будет отображаться правильный элемент, а при нажатии на него появится правильная команда...
Я ищу свою ошибку, но я не могу ее найти. Может быть, вы, ребята, можете мне помочь :-)
Это мой код...
struct RecipeIngredientsView: View {
let myArray = ["Dennis", "Tessa", "Peter", "Anna", "Tessa", "Klaus", "Xyan", "Zuhau", "Clown", "Brot", "Bauer"]
@State private var searchText = ""
@State private var showCancelButton: Bool = false
var body: some View {
VStack
{
HStack
{
HStack
{
Image(systemName: "magnifyingglass")
TextField("Suche", text: $searchText, onEditingChanged: { isEditing in self.showCancelButton = true}, onCommit: {
print("onCommit")
}).foregroundColor(.primary)
Button(action: {
self.searchText = searchText
}){
Image(systemName: "xmark.circle.fill").opacity(searchText == "" ? 0 : 1)
}
}.padding(EdgeInsets(top: 8, leading: 6, bottom: 8, trailing: 6))
.foregroundColor(.secondary)
.background(Color(.secondarySystemBackground))
.cornerRadius(10.0)
if showCancelButton {
Button("Abbrechen")
{
UIApplication.shared.endEditing(_force: true)
self.searchText = ""
self.showCancelButton = false
}
.foregroundColor(Color(.systemBlue))
}
}
.padding(.horizontal)
.navigationBarHidden(showCancelButton)
List {
VStack{
ForEach(myArray.filter{$0.hasPrefix(searchText) || searchText == ""}, id:\.self)
{
searchText in VStack {
CardView(searchText: searchText)
}
}
Spacer()
}
}
.navigationBarTitle(Text("Suche"))
.resignKeyboardOnDragGesture()
}
}
}
struct CardView : View
{
@State var searchText = ""
var body : some View
{
HStack{
Text(searchText)
Spacer()
Button(action: {print("\(searchText) btn pressed!")})
{
Image(systemName: "circle")
.frame(width:25, height:25)
.clipShape(Circle())
}
}
}
}
Спасибо, ребята, и счастливого Рождества! :-)
Это произошло из-за:
List {
VStack{
//.... ForEach loop
}
}
Таким образом, список содержит только один элемент, который является VStack
Чтобы избежать этого, ваш код должен быть таким:
List {
ForEach(myArray.filter{$0.hasPrefix(searchText) || searchText == ""}, id:\.self)
{ searchText in
CardView(searchText: searchText)
}
}