¿Cómo configurar los botones ContextMenu para eliminar y deshabilitar en SwiftUI?

9

Traté de configurar el botón en el contextMenu, pero no funciona.

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
    }

lo que tengo:

 Apariencia no funciona

Lo que estoy buscando: ( eliminar y llamar botones)

Manifestación

Crearía algo UIActionsimilar a lo siguiente, UIKitpero no puedo encontrar ningún modificador o de todos modos para llevar esto a SwiftUI :

let delete = UIAction(title: "Remove", image: UIImage(systemName: "trash"), attributes: .destructive) { action in
    // remove it
}
Mojtaba Hosseini
fuente
¿Encontraste una respuesta?
Andrea Miotto
Parece que todavía no es posible (con SwiftUI puro).
Mojtaba Hosseini

Respuestas:

-2

Alternar un valor booleano que determina si la vista es visible 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")
                        }
                    }
                }
            }
        }
    }
}

Por supuesto, dado que el menú contextual se adjunta al Textque se eliminó, se eliminará permanentemente a menos que tenga algo más (por ejemplo, a Button) que active el valor booleano ( textVisibleen este caso).

Editar : OP quería saber cómo hacer que los botones en el menú contextual fueran deshabilitados / destructivos (colores de fondo gris / rojo), pero creo que a partir del 20 de octubre de 2019, SwiftUI tiene un error que no permite ningún botón en el contexto el menú debe ser de cualquier color que no sea rojo. De lo contrario, establecer el botón como .disabled(true)debería darle un color gris y deshabilitarlo, y establecer el color de primer plano del botón en rojo ( foregroundColor(.red)) debería hacer que el botón sea destructivo.

RPatel99
fuente
Su respuesta está mayormente bien. Solo la otra parte no es necesaria.
E.Coms
1
No entendiste mi pregunta. Quiero configurar los botones para que sean destructivos (rojo) o deshabilitados (gris e inactivo)
Mojtaba Hosseini
1
@MojtabaHosseini ¡Perdón por malinterpretar! Creo que SwiftUI tiene un error en este momento donde las opciones del menú contextual no pueden cambiar los colores, solo pueden ser negros. Puede que le resulte beneficioso presentar un informe de error.
RPatel99
Para aquellos que votaron negativamente: OP cambió su pregunta después de que publiqué mi respuesta. La redacción inicial de la pregunta hizo que pareciera que el OP solo necesitaba saber cómo eliminar una vista con un menú contextual. No estoy borrando mi respuesta, ya que es la única respuesta a esta pregunta y sigo pensando que es relevante para la pregunta y podría ser útil para las personas.
RPatel99