Реструктурировать навигационную ссылку на кнопку для LongPressGesture

Я пытаюсь указать параметр .onlongpressgesture для этого списка групп. Однако, похоже, это не работает, и я полагаю, что это сработает на кнопке. Я пытался применить ".onTapGesture" и ".onLongPressGesture", но безрезультатно.

Есть ли способ преобразовать приведенный ниже код из NavigationLink в кнопку с тем же пунктом назначения при нажатии и дополнительное меню (называемое «OptionsmenuView») при длительном нажатии?

Навигационная ссылка:

       VStack (spacing: 20){
                    ForEach(groups, id:\.self) { Group in
                        NavigationLink(destination: GroupView()) {
                            ZStack (alignment: .bottomLeading) {

                                Image(uiImage: (UIImage(data: Group.groupThumbnail ?? self.image) ?? UIImage(named: "defaultGroupThumbnail"))!)
                                    .resizable(capInsets: EdgeInsets())
                                    .aspectRatio(contentMode: .fill)
                                    .frame(height: 200.0, alignment: .center)
                                    .cornerRadius(22)

                                VStack (alignment: .leading) {
                                    
                                    Text("\(Group.groupTitle ?? "Untitled")")
                                        .font(.title)
                                        .fontWeight(.heavy)
                                        .multilineTextAlignment(.leading)
                                    
                                    Text("Consists of 5 Flowers")
                                }
                                .padding([.leading, .bottom], 18.0)
                                .foregroundColor(.primary)
                            }
                            .listRowBackground(Color.black)
                            
                        }
                    }
                }

Вид OptionMenuView:

      struct OptionsMenuView: View {
    var body: some View {
        
        Menu {
        Button("Cancel", role: .destructive) {
            // Do something
        }
        
        Button {
            // Do something
        } label: {
            Label("Edit", systemImage: "square.and.pencil")
        }
        
        Button {
            // Do something
        } label: {
            Label("Delete", systemImage: "trash")
        }
    } label: {
        Label("Settings", systemImage: "gearshape.fill")
    }
    }
}

Я ценю любые советы. Заранее спасибо.

1 ответ

Не могли бы вы просто использовать .contextMenu?

          NavigationView {
        List (0..<10) { i in
            
            NavigationLink {
                Text("DestionationView")
            } label: {
                Text("Item \(i)")
                
            }
            .contextMenu {   // << here
                Button("Cancel", role: .destructive) {
                    // Do something
                }
                
                Button {
                    // Do something
                } label: {
                    Label("Edit", systemImage: "square.and.pencil")
                }
                
                Button {
                    // Do something
                } label: {
                    Label("Delete", systemImage: "trash")
                }
            }
        }
    }
Другие вопросы по тегам