Как настроить кнопки ContextMenu для удаления и отключения в SwiftUI? - PullRequest
3 голосов
/ 19 октября 2019

Я пытался настроить кнопку в 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
    }

что у меня есть:

Not working appearance

Что я ищу: ( удалить и вызов кнопки)

Demo

Iсоздаст UIAction, как показано ниже в UIKit, но я не могу найти какой-либо модификатор или в любом случае, чтобы привести его к SwiftUI :

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

1 Ответ

0 голосов
/ 20 октября 2019

Переключение логического значения, определяющего, является ли представление видимым, работает:

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).

Edit : OP хотел знать, как отключить кнопки в контекстном меню /деструктивный (серый / красный цвета переднего плана), но я считаю, что по состоянию на 20 октября 2019 года в SwiftUI есть ошибка, из-за которой никакие кнопки в контекстном меню не имеют какого-либо цвета, кроме красного. В противном случае установка кнопки на .disabled(true) должна придать ей серый цвет и отключить ее, а установка цвета переднего плана на красный (foregroundColor(.red)) должна привести к разрушению кнопки.

...