Comment configurer les boutons ContextMenu pour les supprimer et les désactiver dans SwiftUI?

9

J'ai essayé de configurer le bouton dans le contextMenu, mais cela ne fonctionne pas.

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
    }

ce que j'ai:

 Apparence non fonctionnelle

Ce que je recherche: ( supprimer et boutons d' appel )

Démo

Je créerais un UIActioncomme le suivant, UIKitmais je ne trouve aucun modificateur ou de toute façon pour apporter cela à SwiftUI :

let delete = UIAction(title: "Remove", image: UIImage(systemName: "trash"), attributes: .destructive) { action in
    // remove it
}
Mojtaba Hosseini
la source
avez-vous trouvé une réponse?
Andrea Miotto
Il semble que ce ne soit pas encore possible (avec SwiftUI pur).
Mojtaba Hosseini

Réponses:

-2

Le basculement d'un booléen qui détermine si la vue est visible fonctionne:

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

Bien sûr, puisque le menu contextuel est attaché à celui Textqui a été supprimé, il sera définitivement supprimé à moins que vous ayez quelque chose d'autre (par exemple a Button) qui permute le booléen ( textVisibledans ce cas).

Edit : OP voulait savoir comment rendre les boutons dans le menu contextuel désactivés / destructeurs (couleurs de premier plan gris / rouge), mais je crois que depuis le 20 octobre 2019, SwiftUI a un bug qui n'autorise aucun bouton dans le contexte le menu doit être de n'importe quelle couleur autre que le rouge. Sinon, définir le bouton tel qu'il .disabled(true)devrait lui donner une couleur grise et le désactiver, et définir la couleur de premier plan du bouton sur rouge ( foregroundColor(.red)) devrait rendre le bouton destructeur.

RPatel99
la source
Vous répondez est très bien. Juste la partie Else n'est pas nécessaire.
E.Coms
1
Vous avez mal compris ma question. Je veux configurer les boutons pour qu'ils soient destructeurs (rouges) ou désactivés (gris et inactifs)
Mojtaba Hosseini
1
@MojtabaHosseini Désolé pour une mauvaise interprétation! Je pense que SwiftUI a un bug en ce moment où les options du menu contextuel ne peuvent pas changer les couleurs, elles ne peuvent être que noires. Vous pourriez trouver utile de déposer un rapport de bogue.
RPatel99
À ceux qui votent: OP a changé sa question après avoir posté ma réponse. Le libellé initial de la question donnait l'impression que l'OP n'avait besoin que de savoir comment supprimer une vue avec un menu contextuel. Je ne supprime pas ma réponse car c'est la seule réponse à cette question et je pense toujours qu'elle est pertinente pour la question et pourrait être utile pour les gens.
RPatel99