SwiftUI contextMenu仅显示子contextMenu而不显示父contextMenu

db2dz4w8  于 12个月前  发布在  Swift
关注(0)|答案(1)|浏览(105)

我在SwiftUI中有一个macOS应用程序,在父文本和子对象列表中都有2个.contextMenu
即使我右键单击父标签,它也只显示子对象contextMenu
我做错了什么?

List {
                VStack {
                    Text("Parent")
                        .contextMenu {
                            Button("Parent Action") {                                    
                            }
                        }
                    
                    VStack {
                        Text("Child")
                            .contextMenu {
                                Button("Child Action") {
                                }
                            }
                    }
                }
            }

字符串
...
如果我将父项从List更改为ScrollView,它可以工作,但我不想浪费所有内存来预先呈现每个项。

y53ybaqx

y53ybaqx1#

上面的代码将合并的内容List合并成一个项目。所以,当contextMenu出现时,它只是识别Parent。我认为更好的方法是将ParentChild分离成不同的ForEach,以确定单独的父项和子项。

struct Child: Hashable {
    var name: String = ""

    init(_ name: String) {
        self.name = name
    }
}

struct Parent: Hashable {
    var childs: [Child] = []
    var name: String = ""
}

...
var list: [Parent] = [
    .init(childs: [.init("Child 1"), .init("Child 2")], name: "Parent")
]

var body: some View {
    VStack {
        ForEach(list, id: \.self) { p in
            HStack {
                Text(p.name)
                    .contextMenu {
                        Button("Parent Action") {
                        }
                    }
            }
            .frame(maxWidth: .infinity, alignment: .leading)
            
            ForEach(p.childs, id: \.self) { c in
                HStack {
                    Text(c.name)
                        .contextMenu {
                            Button(c.name) {
                            }
                        }
                        .padding(.leading)
                }
                .frame(maxWidth: .infinity, alignment: .leading)
            }
        }
    }
}

字符串

相关问题