How to use NSToolBar in Xcode 6 and Storyboard?

后端 未结 6 2063
予麋鹿
予麋鹿 2020-12-05 06:05

I\'ve been trying to build on a Cocoa app that uses Swift and Storyboard in Xcode 6, but how can I use NSToolbar there?

In Xcode 5 and xib, you can add

6条回答
  •  情歌与酒
    2020-12-05 06:21

    Here's an answer that doesn't rely on run-time hook-ups - @cdalvaro's answer gets most of the way there for some applications, but isn't full, and it requires the ViewController to know about the artificial NSWindowController, which doesn't feel right.

    Like @cdalvaro, the first step is to build your own subclass of NSWindowController, and to set the Storyboard WC to that class. You can then create all of your connections to and from the NSToolbar (both @IBOutlets & @IBActions) in the new WindowController. So far so good.

    The last step, which I haven't seen anywhere else, is how to refer to the ViewController in the WindowController - you can't create an @IBOutlet to it - for the same reasons that we got here in the first place - you can't create references across scenes in the Storyboard. However, the WindowController must have a reference to the ViewController, and it does... self.window!.contentViewController! as! ViewController

    Here's a complete WindowController with a checkbox that sets values in the ViewController, without the ViewController having to know anything...

    class MyWindowController: NSWindowController {
    
        var viewController: ViewController {
            get {
                return self.window!.contentViewController! as! ViewController
            }
        }
    
        @IBOutlet weak var aSwitch: NSButton!
        @IBAction func toolbarActionA(sender: AnyObject) {
            println("toolbarActionA")
            self.viewController.a = !self.viewController.a
            self.aSwitch.state = self.viewController.a ? NSOnState : NSOffState
        }
    }
    

提交回复
热议问题