Подтвердить что ты не робот

Как передать данные из NSWindowController в свой NSViewController?

У меня есть IBOutlet кнопки NSToolBar в моем классе NSWindowController, который является моим основным классом окна:

class MainWindowController: NSWindowController {

    @IBOutlet weak var myButton: NSButton!

    // ...
}

У меня есть класс MainViewController, то есть содержимое NSViewController главного окна.

Как я могу получить доступ к этой кнопке в своем контенте NSViewController? Есть ли лучший способ организовать IBOutlets и контроллеры для облегчения доступа?

4b9b3361

Ответ 1

Как обстоит дело с делегатом? Этот пример изменит название вашей кнопки.

@objc protocol SomeDelegate {
    func changeTitle(title: String)
}

class ViewController: NSViewController {

    weak var delegate: SomeDelegate?

    @IBAction func myAction(sender: AnyObject) {
        delegate?.changeTitle("NewTitle")
    }

}

class MainWindowController: NSWindowController, SomeDelegate {

    @IBOutlet weak var myButton: NSButton!

    override func windowDidLoad() {
        super.windowDidLoad()

        // Implement this method to handle any initialization after your window controller window has been loaded from its nib file.
        let myVc = window!.contentViewController as! ViewController
        myVc.delegate = self

    }

    func changeTitle(title: String) {
        myButton.title = title
    }

}

Ответ 2

Чтобы получить доступ к NSViewController из NSWindowController:

let viewController:MainViewController = self.window!.contentViewController as! MainViewController

Чтобы получить доступ к NSWindowController из NSViewController:

let windowController:MainWindowController = self.view.window?.windowController as! MainWindowController