Come configurare i pulsanti ContextMenu per l'eliminazione e la disabilitazione in SwiftUI?


9

Ho provato a configurare il pulsante in contextMenu, ma non funziona.

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
    }

ciò che ho:

 Aspetto non funzionante

Cosa sto cercando: ( elimina e chiama i pulsanti)

dimostrazione

Vorrei creare un UIActionsimile nel seguente UIKitma non riesco a trovare alcun modificatore o comunque per portarlo su SwiftUI :

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

hai trovato una risposta?
Andrea Miotto,

Sembra che non sia ancora possibile (con SwiftUI puro).
Mojtaba Hosseini,

Risposte:


-2

Attivare / disattivare un valore booleano che determina se la vista è visibile funziona:

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

Naturalmente, poiché il menu di scelta rapida è collegato a quello Textche è stato rimosso, verrà rimosso permanentemente a meno che tu non abbia qualcos'altro (ad es. A Button) che commuta il booleano ( textVisiblein questo caso).

Modifica : OP voleva sapere come rendere i pulsanti nel menu contestuale disabilitati / distruttivi (colori di primo piano grigio / rosso), ma credo che dal 20 ottobre 2019, SwiftUI abbia un bug che non consente alcun pulsante nel contesto menu di qualsiasi colore diverso dal rosso. Altrimenti, impostando il pulsante come .disabled(true)dovrebbe dargli un colore grigio e disabilitarlo, e impostando il colore di primo piano del pulsante su rosso ( foregroundColor(.red)) dovrebbe rendere il pulsante distruttivo.


La tua risposta va bene per lo più. Solo la parte Else non è necessaria.
E.Coms

1
Hai frainteso la mia domanda. Voglio configurare i pulsanti in modo che siano distruttivi (rossi) o disabilitati (grigi e inattivi)
Mojtaba Hosseini,

1
@MojtabaHosseini Ci scusiamo per l'interpretazione errata! Penso che SwiftUI abbia un bug in questo momento in cui le opzioni del menu contestuale non possono cambiare i colori, possono solo essere nere. Potrebbe essere utile presentare una segnalazione di bug.
RPatel99,

A quei voti negativi: OP ha cambiato la sua domanda dopo aver pubblicato la mia risposta. La formulazione iniziale della domanda faceva sembrare che l'OP avesse bisogno solo di sapere come eliminare una vista con un menu di scelta rapida. Non sto eliminando la mia risposta poiché è l'unica risposta a questa domanda e penso ancora che sia pertinente alla domanda e possa essere utile per le persone.
RPatel99,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.