Как настроить кнопки 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
}

ты нашел ответ?
Андреа

Похоже, это пока невозможно (с чистым SwiftUI).
Мойтаба Хоссейни

Ответы:


-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удаленному, оно будет удалено навсегда, если у вас нет чего-то другого (например, a Button), которое переключает логическое значение ( textVisibleв данном случае).

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


Вы отвечаете в основном в порядке. Просто остальное часть не нужна.
E.Coms

1
Вы неправильно поняли мой вопрос. Я хочу, чтобы кнопки были деструктивными (красные) или отключенными (серые и неактивные)
Mojtaba Hosseini

1
@MojtabaHosseini Извините за неправильную интерпретацию! Я думаю, что в SwiftUI сейчас есть ошибка, когда параметры контекстного меню не могут менять цвета, они могут быть только черными. Возможно, вам будет полезно подать отчет об ошибке.
RPatel99

Для тех, кто голосовал: OP изменил свой вопрос после того, как я опубликовал свой ответ. Из-за первоначальной формулировки вопроса казалось, что ОП нужно было знать, как удалить представление с помощью контекстного меню. Я не удаляю свой ответ, поскольку это единственный ответ на этот вопрос, и я все еще думаю, что он имеет отношение к вопросу и может быть полезен для людей.
RPatel99
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.