SwiftUI macOS реагирует на действия строки меню из под-представления - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть представление в моем приложении macOS, которое необходимо уведомить, когда пользователь нажал кнопки отмены и возврата в строке меню. В AppDelegate у меня есть IBActions, которые запускаются, когда пользователь нажимает кнопку отмены / возврата. IBAction публикует уведомление с помощью центра уведомлений, как показано ниже:

extension Notification.Name {

    static let undo = Notification.Name("undo")
    static let redo = Notification.Name("redo")
}

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {

    @IBAction func menuBarUndo(_ sender: Any) {
        print("AppDelegate: pressed undo")
        nc.post(name: .undo, object: nil)
    }


    @IBAction func menuBarRedo(_ sender: Any) {
        print("AppDelegate: pressed redo")
        nc.post(name: .redo, object: nil)


    }

    let nc = NotificationCenter.default

    // applicationDidFinishLaunching and applicationWillTerminate not shown for brevity

}

В моем ContentView у меня есть функция, которую необходимо вызвать, когда пользователь нажимает кнопку отмены / возврата. Его нужно запускать изнутри ContentView, поскольку оно опирается на данные, содержащиеся в этом представлении. Как подписаться на уведомление из ContentView, чтобы я мог вызвать функцию?

1 Ответ

0 голосов
/ 26 апреля 2020

In ContentView in может быть как ниже

var body: some View {
    VStack {
        Text("Demo for receiving notifications")
        .onReceive(NotificationCenter.default.publisher(for: .undo)) { _ in
            /// call undo action
        }
        .onReceive(NotificationCenter.default.publisher(for: .redo)) { _ in
            /// call redo action
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...