Жест касания изображения внутри списка не работает после добавления нового элемента в SWIFTUI
Я столкнулся с проблемой касания изображения. У меня простой список элементов, в каждой строке по 4 кнопки. Каждая строка содержит 4 изображения, и с каждым изображением связано действие onTapGesture. В первый раз я загружаю список, и все работает хорошо, но когда я пытаюсь добавить новый элемент в список (путем добавления ссылки на панель навигации), создается новая строка, но действие касания не работает, если я пытаюсь нажать на одно из 4 изображений в последней строке, которую я добавил. Например, стрелка вверх или вниз должна перемещать вверх или вниз строку. После того, как я добавлю новую строку, стрелка вверх / вниз в новой строке не работает, но если я нажму на последнюю строку -1, стрелка вниз переключится на две строки, и действия по касанию изображения во вставленной строке начнут работать.
Список подкатегорий исходит из другого представления.
struct ExpandedCategoriaView : View {
@Binding var subCategorie : [DisegnoCategoria]
......
List{
ForEach(self.subCategorie, id: \.id){
disegno in
HStack{
if(disegno.cancellato == 1 ){
Text(LocalizedStringKey(disegno.label))
.padding(.leading,10)
.foregroundColor(.red)
Spacer()
Image(systemName: "clock.arrow.circlepath")
.padding(EdgeInsets(top: 5 , leading: 5, bottom: 5, trailing: 5))
.overlay(
RoundedRectangle(cornerRadius: 8)
.stroke(Color.red, lineWidth: 1))
.imageScale(.medium)
.onTapGesture {
DBHelper.dbHelperInstance.restoreLogicDisegnoCategoriaById(idDisegnoCategoria: disegno.id)
subCategorie = getDisegnoCategorieByCategoria()
}
}
else{
if(disegno.editable == 0)
{
Text(LocalizedStringKey(disegno.label))
.padding(.leading,10)
.foregroundColor(.blue)
Spacer()
}
else
{
Text(LocalizedStringKey(disegno.label))
.padding(.leading,10)
.foregroundColor(.green)
Spacer()
HStack{
Image(systemName: "arrow.down")
.padding(EdgeInsets(top: 5 , leading: 5, bottom: 5, trailing: 5))
.overlay(
RoundedRectangle(cornerRadius: 8)
.stroke(Color.orange, lineWidth: 1))
.imageScale(.medium)
.onTapGesture {
goDown(disegnoCategoria: disegno)
}
.padding(.trailing,25)
Button(action: {
goUp(disegnoCategoria: disegno)
print("spinto bottone")
})
{
Image(systemName: "arrow.up")
.padding(EdgeInsets(top: 5 , leading: 5, bottom: 5, trailing: 5))
.overlay(
RoundedRectangle(cornerRadius: 8)
.stroke(Color.orange, lineWidth: 1))
.imageScale(.medium)
.padding(.trailing,25)
}
.buttonStyle(BorderlessButtonStyle())
//.buttonStyle(PlainButtonStyle())
Image(systemName: "pencil")
.padding(EdgeInsets(top: 5 , leading: 5, bottom: 5, trailing: 5))
.overlay(
RoundedRectangle(cornerRadius: 8)
.stroke(Color.yellow, lineWidth: 1))
.imageScale(.medium)
.onTapGesture {
activeSheetDisegnoCategorie = .update
self.selectedDisegno = disegno
}
Image(systemName: "trash.fill")
.padding(EdgeInsets(top: 5 , leading: 5, bottom: 5, trailing: 5))
.overlay(
RoundedRectangle(cornerRadius: 8)
.stroke(Color.red, lineWidth: 1))
.imageScale(.medium)
.onTapGesture {
DBHelper.dbHelperInstance.deleteLogicDisegnoCategoriaById(idDisegnoCategoria: disegno.id)
subCategorie = getDisegnoCategorieByCategoria()
}
.padding(.leading,25)
}
}
}
}
}
}
.navigationBarTitle(Text(LocalizedStringKey("categoria_layout_expand_titolo")),displayMode: .inline)
.navigationBarItems(trailing: Button(action: {
activeSheetDisegnoCategorie = .add
}, label: {
Text(LocalizedStringKey("add"))
}))
.sheet(item: $activeSheetDisegnoCategorie, onDismiss: {
self.subCategorie = getDisegnoCategorieByCategoria()
}) {
item in
switch item {
case .add :
AddDisegnoCategoriaView(activeSheetDisegnoCategoria: $activeSheetDisegnoCategorie,listaDisegnoCategorie: $sottocate.listaDisegnoCategorie,toRefresh: $updater, categoriaExpanded: categoriaToExpand, nuovoDisegnoCategoria: {
disegnoCategoria in
DBHelper.dbHelperInstance.insertDisegnoCategoriaObj(disegnoCategoria: disegnoCategoria)
subCategorie = getDisegnoCategorieByCategoria()
sottocate.listaDisegnoCategorie = getDisegnoCategorieByCategoria()
})
}
}
}
.onAppear(){
getListaSubCategorie()
getListaSubCategorieProva()
}
}
class DisegnoCategoria : Identifiable {
var id : Int
var idCategoria: Int
var ordine : Int
var tipo : Int
var label : String
var editable : Int
var cancellato : Int
var obbligatorio : Int
init(id: Int, idCategoria: Int, ordine: Int, tipo: Int, label: String, editable: Int, cancellato: Int, obbligatorio: Int) {
self.id = id
self.idCategoria=idCategoria
self.ordine=ordine
self.tipo = tipo
self.label=label
self.editable=editable
self.cancellato=cancellato
self.obbligatorio=obbligatorio
}
init() {
self.id = -1
self.idCategoria = -1
self.ordine = -1
self.tipo = -1
self.label = ""
self.editable = -1
self.cancellato = -1
self.obbligatorio = -1
}
}
После вставки 2 строк перезагрузите представление [1]:https://stackru.com/images/8d600fa4a484b3cbe51175ef0cac2b80552062fc.png
После нажатия на футбольную стрелку вверх [2]:https://stackru.com/images/10b02b8c0ec41e41429bf80f1f62ee53c4ac4060.png
Гольф добавлен, но если я попытаюсь нажать на стрелку вверх, она не поднимется [3]:https://stackru.com/images/846a6c2d334484a89c0897a01ae32f6d98235948.png
Любые идеи? Спасибо вам всем