วิธีการตั้งค่าปุ่ม ContextMenu สำหรับการลบและปิดการใช้งานใน SwiftUI?


9

ฉันพยายามกำหนดค่าปุ่มในcontextMenuแต่มันไม่ทำงาน

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
    }

สิ่งที่ฉันมี:

 ไม่ทำงาน

สิ่งที่ฉันกำลังค้นหา: ( ลบและปุ่มโทรออก )

การสาธิต

ฉันจะสร้างสิ่งUIActionต่อไปนี้UIKitแต่ฉันไม่พบตัวดัดแปลงใด ๆ หรือนำสิ่งนี้ไปยังSwiftUI :

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

คุณหาคำตอบหรือไม่?
Andrea Miotto

ดูเหมือนว่าเป็นไปไม่ได้ (ด้วย SwiftUI บริสุทธิ์)
Mojtaba Hosseini

คำตอบ:


-2

การสลับบูลีนที่พิจารณาว่ามุมมองนั้นสามารถมองเห็นได้หรือไม่:

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

แน่นอนเนื่องจากเมนูบริบทแนบกับเมนูTextที่ถูกลบมันจะถูกลบออกอย่างถาวรเว้นแต่คุณจะมีสิ่งอื่น (เช่นกButton) ที่สลับบูลีน ( textVisibleในกรณีนี้)

แก้ไข : OP ต้องการทราบวิธีการทำปุ่มในเมนูบริบทถูกปิดใช้งาน / ทำลาย (สีพื้นหน้าสีเทา / แดง) แต่ฉันเชื่อว่า ณ วันที่ 20 ตุลาคม 2019 SwiftUI มีข้อผิดพลาดที่ไม่อนุญาตให้มีปุ่มใด ๆ ในบริบท เมนูเป็นสีอื่นนอกเหนือจากสีแดง มิฉะนั้นการตั้งค่าปุ่มตามที่.disabled(true)ควรให้เป็นสีเทาและปิดการใช้งานและการตั้งค่าสีพื้นหน้าของปุ่มเป็นสีแดง ( foregroundColor(.red)) ควรทำให้ปุ่มถูกทำลาย


คำตอบของคุณดีมาก เพียงแค่ส่วนอื่นไม่จำเป็น
E.Coms

1
คุณเข้าใจคำถามของฉันผิด ฉันต้องการกำหนดค่าปุ่มให้เป็นแบบทำลาย (สีแดง)หรือปิดใช้งาน (สีเทาและไม่ทำงาน)
Mojtaba Hosseini

1
@MojtabaHosseini ขออภัยที่เข้าใจผิด! ฉันคิดว่า SwiftUI มีข้อบกพร่องในขณะนี้ที่ตัวเลือกเมนูบริบทไม่สามารถเปลี่ยนสีได้พวกเขาสามารถเป็นสีดำได้เท่านั้น คุณอาจพบว่ามีประโยชน์ในการรายงานข้อผิดพลาด
RPatel99

เป็นการ downvoting เหล่านั้น: OP เปลี่ยนคำถามของเขาหลังจากที่ฉันโพสต์คำตอบของฉัน ข้อความเริ่มต้นของคำถามทำให้ดูเหมือนว่า OP จำเป็นต้องรู้วิธีลบมุมมองด้วยเมนูบริบทเท่านั้น ฉันไม่ได้ลบคำตอบเพราะมันเป็นคำตอบเดียวสำหรับคำถามนี้และฉันก็ยังคิดว่ามันเกี่ยวข้องกับคำถามและอาจเป็นประโยชน์กับคน
RPatel99
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.