¿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
}

¿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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.