Jak skonfigurować przyciski ContextMenu do usuwania i wyłączania w SwiftUI?


9

Próbowałem skonfigurować przycisk w contextMenu, ale nie działa.

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
    }

Co ja mam:

 Nie działa wygląd

Czego szukam: ( przyciski usuwania i wywoływania )

Próbny

Chciałbym stworzyć coś UIActionpodobnego do poniższego, UIKitale nie mogę znaleźć żadnego modyfikatora ani w żaden sposób, aby przenieść go do SwiftUI :

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

znalazłeś odpowiedź?
Andrea Miotto,

Wydaje się, że nie jest to jeszcze możliwe (z czystym SwiftUI).
Mojtaba Hosseini

Odpowiedzi:


-2

Przełączanie wartości logicznej, która określa, czy widok jest widoczny, działa:

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

Oczywiście, ponieważ menu kontekstowe jest dołączone do tego, Textco zostało usunięte, zostanie trwale usunięte, chyba że masz coś innego (np. A Button), który przełącza wartość logiczną ( textVisiblew tym przypadku).

Edycja : OP chciał wiedzieć, jak sprawić, by przyciski w menu kontekstowym były wyłączone / destrukcyjne (szare / czerwone kolory pierwszego planu), ale wierzę, że od 20 października 2019 r. SwiftUI ma błąd, który nie pozwala na żadne przyciski w kontekście menu w dowolnym kolorze innym niż czerwony. W przeciwnym razie ustawienie przycisku w taki sposób, .disabled(true)aby nadało mu szary kolor i wyłączenie, a ustawienie koloru pierwszego planu przycisku na czerwony ( foregroundColor(.red)) powinno spowodować, że przycisk będzie destrukcyjny.


Twoja odpowiedź jest w większości w porządku. Tylko inna część nie jest konieczna.
E.Coms

1
Źle zrozumiałeś moje pytanie. Chcę skonfigurować przyciski tak, aby były destrukcyjne (czerwone) lub wyłączone (szare i nieaktywne)
Mojtaba Hosseini

1
@MojtabaHosseini Przepraszamy za błędną interpretację! Myślę, że SwiftUI ma teraz błąd, w którym opcje menu kontekstowego nie mogą zmieniać kolorów, mogą być tylko czarne. Złożenie raportu o błędzie może okazać się korzystne.
RPatel99,

Do tych oddających głos: OP zmienił swoje pytanie po opublikowaniu mojej odpowiedzi. Początkowe sformułowanie pytania wydawało się, że OP musiał wiedzieć tylko, jak usunąć widok za pomocą menu kontekstowego. Nie usuwam mojej odpowiedzi, ponieważ jest to jedyna odpowiedź na to pytanie i nadal uważam, że ma ona znaczenie dla pytania i może być użyteczna dla ludzi.
RPatel99
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.