14

我现在与 Cocoa 斗争了 2 个小时,但没有成功。我想向工具栏添加自定义视图。因此,我在窗口中添加了一个 NSToolbar(使用 IB),并添加了我的视图(效果很好)。IB 自动创建了一个 NSToolbarItem。我在这里按照 Apple 的说明进行操作:http: //developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Toolbars/Tasks/AddRemoveToolbarItems.html#//apple_ref/doc/uid/20000755-BBCGJCDJ

问题是我现在不知道该怎么做,虽然它的标签显示在窗口中,但视图没有显示。

这是我用来绘制的代码(非常简单,用于测试目的)

- (void)drawRect:(NSRect)dirtyRect {
    [[NSColor blackColor] set];
    [[NSBezierPath bezierPathWithRect:self.bounds] fill];
}

有人能帮我吗?

提前致谢。

4

2 回答 2

19

我解决了这个问题。

我将自定义视图放在笔尖的根目录中。我添加了一个经典的 NSToolbarItem 并创建了两个插座:一个用于自定义视图,一个用于 NSToolbarItem。在 上-(void)awakeFromNib,我setView:使用自定义视图调用了 NSToolbarItem。

根据互联网上的一些资源,这是 Interface Builder 的一个错误。

于 2011-02-15T21:34:16.823 回答
7

根据苹果工程师在http://www.mail-archive.com/cocoa-dev@lists.apple.com/msg35673.html的讨论中,Interface Builder 中存在一个错误,即“自定义视图”(NSViews 创建在 IB 中)在用作 NSToolbarItem 的视图时未正确解码,因此不会出现在工具栏中。其他类型的 NSView,例如 NSButtons 和 NSBoxes,可以作为工具栏项正常工作:您可以在 Interface Builder 中创建它们,然后将它们拖到工具栏中以使其成为工具栏项。

(上面链接中的讨论暗示该错误取决于如何在运行时从 XIB 创建“自定义视图”:使用 initWithFrame: 而不是 initWithCoder:。讨论日期为 2009 年,但截至目前仍未修复XCode 4.5/OS X 10.8。)

在我的情况下,我使用常规 NSView 来包装一组控件(音量滑块和最小/最大按钮),而不是实现自定义 NSView 子类。我可以通过使用 NSBox 而不是 NSView 作为容器来避免这个问题:我使 NSBox 透明、无标题和无边界,因此它的行为与普通的 NSView 包装器完全一样。这在 IB 中需要做更多的工作,但省去了以编程方式将视图连接到工具栏项的麻烦。

于 2012-12-29T17:15:01.977 回答