Como configurar os botões do ContextMenu para exclusão e desativação no SwiftUI?

9

Eu tentei configurar o botão no contextMenu, mas não está funcionando.

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
    }

o que eu tenho:

 Aparência não está funcionando

O que estou procurando: ( botões excluir e ligar )

Demo

Eu criaria um UIActioncomo o seguinte em, UIKitmas não consigo encontrar nenhum modificador ou mesmo assim para trazer isso para o SwiftUI :

let delete = UIAction(title: "Remove", image: UIImage(systemName: "trash"), attributes: .destructive) { action in
    // remove it
}
Mojtaba Hosseini
fonte
você encontrou uma resposta?
Andrea Miotto
Parece que ainda não é possível (com o SwiftUI puro).
Mojtaba Hosseini

Respostas:

-2

Alternar um booleano que determina se a exibição é visível funciona:

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

Obviamente, como o menu de contexto está anexado ao Textque foi removido, ele será removido permanentemente, a menos que você tenha algo mais (por exemplo, a Button) que alterna o booleano ( textVisibleneste caso).

Edit : O OP queria saber como tornar os botões no menu de contexto desativados / destrutivos (cores de primeiro plano em cinza / vermelho), mas acredito que em 20 de outubro de 2019, o SwiftUI possui um bug que não permite botões no contexto menu para ter qualquer cor diferente de vermelho. Caso contrário, definir o botão como .disabled(true)deve ter uma cor cinza e desativá-lo, e definir a cor do primeiro plano do botão para vermelho ( foregroundColor(.red)) deve tornar o botão destrutivo.

RPatel99
fonte
Você responde está bem. Apenas a parte Else não é necessária.
E.Coms
11
Você não entendeu minha pergunta. Quero botões configurar para ser destrutivo (vermelho) ou desativado (cinza e inativo)
Mojtaba Hosseini
11
@MojtabaHosseini Desculpe por interpretar mal! Eu acho que o SwiftUI tem um bug no momento, onde as opções do menu de contexto não podem mudar de cor, elas só podem ser pretas. Você pode achar benéfico registrar um relatório de bug.
RPatel99
Para aqueles que votaram mal: o OP mudou sua pergunta depois que eu postei minha resposta. A formulação inicial da pergunta fez parecer que o OP só precisava saber como excluir uma exibição com um menu de contexto. Não estou excluindo minha resposta, pois é a única resposta a essa pergunta e ainda acho que é relevante para a pergunta e pode ser útil para as pessoas.
RPatel99