如何在SwiftUI中配置ContextMenu按钮以进行删除和禁用?


9

我尝试在中配置按钮contextMenu,但无法正常工作。

Text("A label that have context menu")
    .contextMenu {
        Button(action: {
            // remove it
        }) {
            Text("Remove")
                .foregroundColor(.red) // Not working
            Image(systemName: "trash")
        }.disabled(true) // Not working
    }

我有的:

 外观不正常

我要的是:(删除通话按钮)

演示版

我会在其中创建一个UIAction类似以下内容的文件,UIKit但找不到任何修饰符或将其带到SwiftUI的方法

let delete = UIAction(title: "Remove", image: UIImage(systemName: "trash"), attributes: .destructive) { action in
    // remove it
}

你找到答案了吗?
安德里亚·米托

似乎还不可能(使用纯SwiftUI)。
Mojtaba Hosseini

Answers:


-2

切换确定视图是否可见的布尔值是可行的:

struct ContentView: View {
    @State var textVisible = true
    var body: some View {
        Group {
            if textVisible {
                Text("Hello World")
                .contextMenu {
                    Button(action: {
                        self.textVisible = false
                    }) {
                        HStack {
                            Text("Remove")
                            Image(systemName: "trash")
                        }
                    }
                }
            }
        }
    }
}

当然,由于上下文菜单是附加到Text已删除的菜单上的,因此它将永久删除,除非您有其他选择(例如Button)来切换布尔值(textVisible在这种情况下)。

编辑:OP想知道如何使上下文菜单中的按钮被禁用/破坏性(灰色/红色前景色),但我相信截至2019年10月20日,SwiftUI的错误不允许上下文中的任何按钮菜单可以是红色以外的任何其他颜色。否则,将按钮设置为.disabled(true)应该会给它提供灰色并禁用它,并将按钮的前景色设置为红色(foregroundColor(.red))应该会使按钮具有破坏性。


您的回答基本上没问题。只是其他部分是没有必要的。
E.Coms

1
你误解了我的问题。我想将按钮配置为破坏性的(红色)禁用的(灰色
且不

1
@MojtabaHosseini对不起,造成误解!我认为SwiftUI现在有一个错误,上下文菜单选项不能更改颜色,它们只能是黑色。您可能会发现提交错误报告很有帮助。
RPatel99

对于那些不满意的人:OP 我发布答案改变了他的问题。该问题的最初措辞使其看起来好像OP仅需要知道如何使用上下文菜单删除视图。我不会删除我的答案,因为它是此问题的唯一答案,但我仍然认为它与该问题相关,可能对人们有用。
RPatel99 '19
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.