SwiftUI 中带有嵌套视图的上下文菜单

Context menu in SwiftUI with nested views

在嵌套视图中使用 .contextMenu 视图修饰符时似乎出现了问题。

下面是显示问题的示例代码:

import SwiftUI

enum SampleEnum: String, CaseIterable {
  case one, two, three, four
}

struct ContentView: View {
  var body: some View {
    Form {
      Section {
        VStack  {
          HStack  {
            ForEach(SampleEnum.allCases, id:\.self) { id in
              Text(id.rawValue)
                .contextMenu {
                  Button {
                    print("Change country setting")
                  } label: {
                    Label("Choose Country", systemImage: "globe")
                  }
                }
            }
          }
        }
      }
    }
  }
}

struct ContentView_Previews: PreviewProvider {
  static var previews: some View {
    ContentView()
  }
}

结果如下:

因此,似乎无法在单个文本视图上执行上下文菜单,因为整个 section/stack 已被选中。

有什么方法可以让 contextMenu 在这种嵌套布局中的单个文本视图上工作?

试试这个解决方法,我将 contextMenu 更改为 Manu() 并将您的 Text() 作为其参数传递,使每个文本都有自己想要的菜单,并正确打印每个 ID证明每个动作独立于每个 Text()

代码:

struct ContentView: View {
    var body: some View {
        Form {
            Section {
                VStack  {
                    HStack  {
                        ForEach(SampleEnum.allCases, id:\.self) { id in
                            Menu("\(Text(id.rawValue))") {
                                Button {
                                    print("Change country setting")
                                    print(id)
                                } label: {
                                    Label("Choose Country", systemImage: "globe")
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}