使用NSToolBar Outlet xcode 6和Storyboard?

时间:2014-12-09 04:27:32

标签: cocoa swift xcode6 iboutlet nswindowcontroller

我正在尝试在我的viewcontroller中为我的窗口控制器中的工具栏项添加一个插座。我曾试过玩第一响应者和绑定但未能找到任何解决方案。

回答的类似问题提供了一些见解,但除了仍然询问如何在评论中添加它们之外,没有人提到IBOutlets的任何内容。答案已被接受,所以我假设没有人会加入它。

How to use NSToolBar in Xcode 6 and Storyboard?

我的问题根本不清楚,我希望能够将它添加到我的故事板程序中

@IBOutlet weak var Mytoolbar: NSToolbarItem!

func enabletoolbar()
{
    Mytoolbar.action = "FunctionIn.ViewController.swift"
    Mytoolbar.enabled = true
}

4 个答案:

答案 0 :(得分:1)

通过将IBOutlets添加到我的自定义NSWindow类并使用故事板将我的视图连接到IBOutlets,我找到了一个不错的解决方法。然后,我从我的NSViewController类中访问这些视图,方法是从自定义的NSWindow中获取它们。

答案 1 :(得分:0)

基本上,您需要将操作和其他属性设置为toolbaritem而不是工具栏中。所以尝试一样。

答案 2 :(得分:0)

我最终在我的视图控制器中执行此操作似乎正常工作

override func viewDidLayout() {
    var x = self.view.window?.toolbar?.items[1].label
    println(x)
    if(self.view.window?.toolbar?.items[0].label! != "Check")
    {
        toobarediting()
    }
    println("didlay")
}

func toobarediting() {
    self.view.window?.toolbar?.insertItemWithItemIdentifier("Check", atIndex: 0)
}

func toolbarcheck(functiontoset: Selector) {
    var y = self.view.window?.toolbar?.items[0] as NSToolbarItem
    y.action = functiontoset
    if(functiontoset != nil)
    {
        y.enabled = true
    }
}

它似乎允许我使工具栏按钮可点击/不可点击,当我需要它来改变它似乎比笨重和容易出错

myitem.enable = fale 
myitem.action = nil

这真的是osx中基于故事板的应用程序的最佳方式吗?

答案 3 :(得分:0)

虽然连接 IBActions 通过使用 First Responder 或通过向场景添加“对象”,然后将其类更改为窗口的视图控制器类来工作,但这对您想要的 IBOutlets 和委托没有帮助指向视图控制器。

这里有一个解决方法:

将工具栏添加到视图控制器,而不是其窗口。这样,您可以轻松地在 View Controller Scene 中建立所有 IBOutlet 连接。我已经这样做了多年,没有发现任何问题,即使在使用 Tabs 时也是如此。

然后,您必须在代码中分配窗口的工具栏。例如。像这样:

@interface ViewController ()
    @property (weak) IBOutlet NSToolbar *toolbar; // connect this in your storyboard to the Toolbar that you moved to the View Controller Scene
@end

- (void)viewWillAppear {
    [super viewWillAppear];
    self.view.window.toolbar = self.toolbar;
}