Жест касания изображения внутри списка не работает после добавления нового элемента в 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

Любые идеи? Спасибо вам всем

0 ответов

Другие вопросы по тегам