Передать значение привязки в новое NSWindow? - PullRequest
0 голосов
/ 18 апреля 2020

В этом приложении SwiftUI для macOS я открываю новое окно при нажатии кнопки.

После нажатия кнопка остается подсвеченной до тех пор, пока окно открывается - при повторном нажатии я закройте окно и восстановите нормальное состояние кнопки.

Я использую этот оконный контроллер:

class MyWindowController<RootView: View>: NSWindowController {

    convenience init(rootView: RootView) {
        let hostingController = NSHostingController(rootView: rootView)
        let window = NSWindow(contentViewController: hostingController)
        self.init(window: window)
    }
}

И назову это так, на мой взгляд:

struct ContentView: View {
    @State private var showWindow = false
    @State private var myWindowController: MyWindowController<MyView>?

    var body: some View {

        Button(action: {
            self.showWindow.toggle()
            if self.showWindow {
                self.myWindowController = MyWindowController(rootView: MyView())
                self.myWindowController?.showWindow(nil)
            } else {
                self.myWindowController?.close()
                self.myWindowController = nil
            }
        }) {
            if self.showWindow {
                Text("Close")
            } else {
                Text("Show")
            }
        }.buttonStyle(MyButtonStyle(isPressed: showWindow))

Теперь требование, которое я не могу понять, заключается в следующем: нам нужно изменить состояние кнопки (или инициировать любое другое действие), когда пользователь закрывает окно, нажимая на его красный индикатор c (вместо нажатия на выделенную выделенную кнопку в главном окне).

Поэтому я подумал, что сделаю это, передав значение привязки (showWindow bool) контроллеру окна, который, в свою очередь, передаст его окну сам - и в окне переопределите метод close() (который вызывается при нажатии красной лампочки trafi c) и установите для bool значение false, чтобы при связывании кнопка в главном окне могла измениться его состояние (и будет делать любые другие соответствующие действия).

Увы, не может сделать. Я попытался добавить параметр Bool для удобства инициализации MyWindowController, который я бы назначил свойству @Binding var isPresented: Bool, но XCode продолжает кричать мне, что в классе нет инициализаторов или что isPresented не инициализируется, независимо от того, какую комбинацию я пытаюсь .

Я пытаюсь это сделать, потому что думаю, что решение состоит в том, чтобы использовать значение привязки, но я могу ошибаться, конечно.

Итак, двойной вопрос:

  • как я могу передать это значение привязки оконному контроллеру и окну?

или

  • возможно, я думаю, что это неправильно, в этом случае, что бы быть правильным способом управления закрывающимся окном вместо этого?

(Подводя итог, цель состоит в том, чтобы: нажать кнопку на главном экране, открыть окно с новым видом, а затем сделать что-то на главном экране, когда окно закрыто пользователем)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...