#macos #swiftui #menu #menubar
Вопрос:
Я пытаюсь добавить в свое приложение macOS SwiftUI опцию меню Правка->Вставить. Мое приложение поддерживает только текст (например, оболочку командной строки), поэтому я хочу отключить опцию меню, если в буфере обмена нет текста.
Буфер обмена может изменять свое содержимое только из моего приложения или из другого приложения. Поэтому, когда я получаю NSApplication.didBecomeActiveNotification, я могу проверить буфер обмена на наличие текста, и если он есть, я включаю меню, а если нет, то я могу его отключить.
За исключением того, что я не могу понять, как это сделать из SwiftUI.
Я могу поймать NSApplication.didBecomeActiveNotification. Я могу проверить состояние буфера обмена. Но я не могу понять, как сделать серый (или отключить серый) пункт меню. Вот что я попробовал:
import SwiftUI
@main
struct MenusApp: App
{
@State private var clipboard_has_text = false
var body: some Scene
{
WindowGroup
{
ContentView()
.onReceive(NotificationCenter.default.publisher(for: NSApplication.didBecomeActiveNotification))
{ _ in
clipboard_has_text = NSPasteboard.general.canReadItem(withDataConformingToTypes: ["public.plain-text"])
print("New State:", clipboard_has_text)
}
}
.commands
{
CommandGroup(replacing: .pasteboard)
{
Button("Paste")
{
print("Should be true:", clipboard_has_text)
}
.keyboardShortcut("V").disabled(clipboard_has_text)
}
}
}
}
Как я должен это сделать (потому что этот способ не работает)?
Спасибо.