如何在Xcode 6和Storyboard中使用NSToolBar?

Bla*_*ard 13 xcode cocoa storyboard nstoolbar swift

我一直在尝试构建一个在Xcode 6中使用Swift和Storyboard的Cocoa应用程序,但我怎么能在那里使用NSToolbar

在Xcode 5和xib中,您可以NSToolbar从对象库中添加到任何.xib文件,然后单击添加的工具栏以展开它,并将连接从任何项目拖放到AppDelegate.h文件中.通过这种方式,您可以创建IBActionIBOutlet连接.我确认如果你在Xcode 6中使用Swift和非故事板,也可以这样做.但是,在Xcode 6和Storyboard环境中看起来并非如此.

我首先创建了一个在Xcode 6中使用Storyboard的项目,但后来,我无法NSToolbar在对象库中添加一个到Storyboard中的View Controller.所以我将它添加到Storyboard中的Window Controller的Window对象中.然而,这种方式我不能创建展开的工具栏在任的任何项目的连接AppDelegate.swiftViewController.swift.

所以我的问题是:

  • 创建使用的故事板应用程序是否可行NSToolbar
  • 如果可行,是否在NSToolbarWindow Controller中添加了正确的方法NSToolBar
  • 最后,我如何在那里创建@IBOutlet@IBAction连接?

UPDATE

我发现@GeorgeVillasboas接受的答案只适用于@IBAction.我仍在寻找如何创建@IBOutlet连接...

Geo*_*oas 25

我遇到了同样的问题.该解决方案适用于Objective-C和Swift项目.

在OSX上使用Storyboard,它会创建一个NSWindow实例,并将其作为其窗口内容Segue转移到另一个NSViewController,如您所述.

在ViewController上,创建标准IBAction以在单击工具栏时接收操作.要使用NSToolbar连接它,只需从NSToolbarItem控制拖动(或左键拖动)到FirstResponder对象,如下图所示.

在XCode 6上连接NSToolbar

这将打开一个巨大的可用连接列表.您的IBAction将在该列表中.只是选择它,你很高兴去.

希望这可以帮助!

  • Apple需要烧烤并邀请Cocoa和Cocoa Touch团队,这样他们才能最终相遇并相互了解,并开始为OSX和iOS创建一套统一的控件和API!顺便提一下,与iOS相比,Cocoa更加复杂和有问题.现在是Cocoa团队从Cocoa Touch复制API的时候了.Apple,我在看着你! (6认同)
  • @GeorgeVillasboas IBOutlets怎么样?无法找到连接方式. (5认同)
  • @Gardecolo你设法将你的ViewController作为NSWindow的代表吗?在这里,我在Swift中编译了一个简单而有效的例子.你应该能够使用它.希望能帮助到你.最好.G. - https://github.com/ghvillasboas/SimpleNSToolbarWire (2认同)
  • @Abin看看这个示例项目.希望能帮助到你.https://github.com/ghvillasboas/SimpleNSToolbarWire (2认同)

Gri*_*mxn 11

这是一个不依赖于运行时连接的答案 - @ cdalvaro的答案大部分用于某些应用程序,但是不完整,它需要ViewController知道人工NSWindowController,而不是感觉正确.

与@cdalvaro一样,第一步是构建自己的子类NSWindowController,并将Storyboard WC设置为该类.然后,您可以在新的WindowController中创建与NSToolbar(@IBOutlets和@IBActions)的所有连接.到现在为止还挺好.

我在其他任何地方都没有看到的最后一步是如何引用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
    }
}
Run Code Online (Sandbox Code Playgroud)