【问题标题】:Context menu in SwiftUI with nested viewsSwiftUI 中带有嵌套视图的上下文菜单
【发布时间】:2021-12-16 04:01:32
【问题描述】:

在嵌套视图中使用 .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()
  }
}

结果如下:

因此,由于选择了整个部分/堆栈,因此似乎无法在单个文本视图上执行上下文菜单。

有没有办法让 contextMenu 在这种嵌套布局中的单个文本视图上工作?

【问题讨论】:

  • 可能与表单有关。试试Vstack,看看有没有区别
  • .contextMenu 已弃用

标签: swiftui contextmenu


【解决方案1】:

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

代码:

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")
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

【讨论】:

  • 谢谢!我的示例是我的应用所需的更简单版本,但在实际应用中进行的简单测试看起来很有希望。
  • @Phantom59 很高兴它有帮助:)
猜你喜欢
  • 2022-07-01
  • 2020-11-17
  • 2021-05-24
  • 2019-09-11
  • 1970-01-01
  • 2014-12-19
  • 2021-09-14
  • 2020-05-23
  • 1970-01-01
相关资源
最近更新 更多