Wie konfiguriere ich ContextMenu-Schaltflächen zum Löschen und Deaktivieren in SwiftUI?

9

Ich habe versucht, die Schaltfläche in der zu konfigurieren contextMenu, aber es funktioniert nicht.

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
    }

Was ich habe:

 Nicht funktionierendes Aussehen

Was ich suche: ( Tasten löschen und aufrufen )

Demo

Ich würde UIActionwie folgt erstellen, UIKitaber ich kann keinen Modifikator finden oder sowieso, um dies auf die SwiftUI zu bringen :

let delete = UIAction(title: "Remove", image: UIImage(systemName: "trash"), attributes: .destructive) { action in
    // remove it
}
Mojtaba Hosseini
quelle
Hast du eine Antwort gefunden?
Andrea Miotto
Scheint, als wäre es noch nicht möglich (mit reinem SwiftUI).
Mojtaba Hosseini

Antworten:

-2

Das Umschalten eines Booleschen Werts, der bestimmt, ob die Ansicht sichtbar ist, funktioniert:

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

Da das Kontextmenü an das Textentfernte angehängt ist , wird es natürlich dauerhaft entfernt, es sei denn, Sie haben etwas anderes (z. B. a Button), das den Booleschen Wert umschaltet ( textVisiblein diesem Fall).

Bearbeiten : OP wollte wissen, wie Schaltflächen im Kontextmenü deaktiviert / destruktiv gemacht werden (graue / rote Vordergrundfarben), aber ich glaube, dass SwiftUI ab dem 20. Oktober 2019 einen Fehler hat, der keine Schaltflächen im Kontext zulässt Menü, um eine andere Farbe als Rot zu haben. Andernfalls sollte die Schaltfläche destruktiv .disabled(true)sein, wenn Sie die Schaltfläche so einstellen, dass sie eine graue Farbe erhält und deaktiviert wird. Wenn Sie die Vordergrundfarbe der Schaltfläche auf rot ( foregroundColor(.red)) setzen.

RPatel99
quelle
Ihre Antwort ist meistens in Ordnung. Nur der andere Teil ist nicht notwendig.
E.Coms
1
Du hast meine Frage falsch verstanden. Ich möchte Schaltflächen so konfigurieren, dass sie destruktiv (rot) oder deaktiviert (grau und inaktiv) sind
Mojtaba Hosseini
1
@ MojtabaHosseini Entschuldigung für die Fehlinterpretation! Ich denke, SwiftUI hat momentan einen Fehler, bei dem Kontextmenüoptionen die Farben nicht ändern können, sondern nur schwarz sein können. Möglicherweise ist es hilfreich, einen Fehlerbericht einzureichen.
RPatel99
Zu denen, die abstimmen: OP hat seine Frage geändert, nachdem ich meine Antwort gepostet habe. Der ursprüngliche Wortlaut der Frage ließ den Eindruck entstehen, dass das OP nur wissen musste, wie eine Ansicht mit einem Kontextmenü gelöscht wird. Ich lösche meine Antwort nicht, da dies die einzige Antwort auf diese Frage ist und ich immer noch denke, dass sie für die Frage relevant ist und für Menschen nützlich sein könnte.
RPatel99