我一直在尝试构建一个在Xcode 6中使用Swift和Storyboard的Cocoa应用程序,但我怎么能在那里使用NSToolbar
?
在Xcode 5和xib中,您可以NSToolbar
从对象库中添加到任何.xib文件,然后单击添加的工具栏以展开它,并将连接从任何项目拖放到AppDelegate.h
文件中.通过这种方式,您可以创建IBAction
或IBOutlet
连接.我确认如果你在Xcode 6中使用Swift和非故事板,也可以这样做.但是,在Xcode 6和Storyboard环境中看起来并非如此.
我首先创建了一个在Xcode 6中使用Storyboard的项目,但后来,我无法NSToolbar
在对象库中添加一个到Storyboard中的View Controller.所以我将它添加到Storyboard中的Window Controller的Window对象中.然而,这种方式我不能创建展开的工具栏在任的任何项目的连接AppDelegate.swift
或ViewController.swift
.
所以我的问题是:
创建使用的故事板应用程序是否可行NSToolbar
?
如果可行,是否在NSToolbar
Window Controller中添加了正确的方法NSToolBar
?
最后,我如何在那里创建@IBOutlet
和@IBAction
连接?
我发现@GeorgeVillasboas接受的答案只适用于@IBAction
.我仍在寻找如何创建@IBOutlet
连接...
我遇到了同样的问题.该解决方案适用于Objective-C和Swift项目.
在OSX上使用Storyboard,它会创建一个NSWindow实例,并将其作为其窗口内容Segue转移到另一个NSViewController,如您所述.
在ViewController上,创建标准IBAction以在单击工具栏时接收操作.要使用NSToolbar连接它,只需从NSToolbarItem控制拖动(或左键拖动)到FirstResponder对象,如下图所示.
这将打开一个巨大的可用连接列表.您的IBAction将在该列表中.只是选择它,你很高兴去.
希望这可以帮助!
这是一个不依赖于运行时连接的答案 - @ cdalvaro的答案大部分用于某些应用程序,但是不完整,它需要ViewController知道人工NSWindowController
,而不是感觉正确.
与@cdalvaro一样,第一步是构建自己的子类NSWindowController
,并将Storyboard WC设置为该类.然后,您可以在新的WindowController中创建与NSToolbar
(@IBOutlet
s和@IBAction
s)的所有连接.到现在为止还挺好.
我在其他任何地方都没有看到的最后一步是如何引用WindowController中的ViewController - 你无法创建@IBOutlet
它 - 出于我们首先到达这里的原因 - 你不能在Storyboard中的场景中创建引用.但是,WindowController必须具有对ViewController的引用,它确实...self.window!.contentViewController! as! ViewController
这是一个完整的WindowController,带有一个复选框,用于设置ViewController中的值,而ViewController 不需要知道任何内容 ......
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 } }