Bagaimana cara mengkonfigurasi tombol ContextMenu untuk dihapus dan dinonaktifkan di SwiftUI?

9

Saya mencoba mengkonfigurasi tombol di contextMenu, tetapi tidak berfungsi.

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
    }

apa yang saya punya:

 Penampilan tidak bekerja

Yang saya cari: ( hapus dan panggil tombol)

Demo

Saya akan membuat UIActionseperti berikut ini UIKittetapi saya tidak dapat menemukan pengubah atau tetap membawa ini ke SwiftUI :

let delete = UIAction(title: "Remove", image: UIImage(systemName: "trash"), attributes: .destructive) { action in
    // remove it
}
Mojtaba Hosseini
sumber
apakah kamu menemukan jawaban?
Andrea Miotto
Sepertinya itu belum memungkinkan (dengan SwiftUI murni).
Mojtaba Hosseini

Jawaban:

-2

Beralih boolean yang menentukan apakah tampilan terlihat berfungsi:

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

Tentu saja, karena menu konteks dilampirkan ke Textyang telah dihapus, itu akan dihapus secara permanen kecuali Anda memiliki sesuatu yang lain (misalnya a Button) yang mengubah boolean ( textVisibledalam hal ini).

Sunting : OP ingin tahu cara membuat tombol di menu konteks dinonaktifkan / destruktif (warna latar depan abu-abu / merah), tetapi saya percaya bahwa pada 20 Oktober 2019, SwiftUI memiliki bug yang tidak mengizinkan tombol apa pun dalam konteks menu menjadi warna apa saja selain merah. Jika tidak, pengaturan tombol seperti yang .disabled(true)seharusnya memberikan warna abu-abu dan menonaktifkannya, dan pengaturan warna foreground tombol menjadi merah ( foregroundColor(.red)) harus membuat tombol destruktif.

RPatel99
sumber
Jawaban Anda sebagian besar baik-baik saja. Hanya bagian lain tidak perlu.
E.Coms
1
Anda salah mengerti pertanyaan saya. Saya ingin mengkonfigurasi tombol menjadi destruktif (merah) , atau dinonaktifkan (abu-abu dan tidak aktif)
Mojtaba Hosseini
1
@MojtabaHosseini Maaf karena salah mengartikan! Saya pikir SwiftUI memiliki bug sekarang di mana opsi menu konteks tidak dapat mengubah warna, mereka hanya bisa menjadi hitam. Mungkin bermanfaat jika Anda melaporkan laporan bug.
RPatel99
Untuk mereka yang kalah: OP mengubah pertanyaannya setelah saya memposting jawaban saya. Kata-kata awal dari pertanyaan membuatnya tampak seperti OP hanya perlu tahu cara menghapus tampilan dengan menu konteks. Saya tidak menghapus jawaban saya karena ini adalah satu-satunya jawaban untuk pertanyaan ini dan saya masih berpikir itu relevan dengan pertanyaan dan dapat bermanfaat bagi orang-orang.
RPatel99