Як налаштувати кнопки 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що було видалено, воно буде назавжди видалене, якщо у вас є щось інше (наприклад, а Button), яке перемикає булеве ( textVisibleв даному випадку).

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


Ви відповідаєте здебільшого добре. Просто частина Else не потрібна.
E.Coms

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

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

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