我现在正在与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];
}
有人可以帮助我吗?
提前致谢。
答案 0 :(得分:19)
我解决了这个问题。
我将自定义视图放在笔尖的根目录中。我添加了一个经典的NSToolbarItem并创建了两个出口:一个用于自定义视图,另一个用于NSToolbarItem。在-(void)awakeFromNib
上,我使用自定义视图在NSToolbarItem上调用了setView:
。
根据互联网上的一些资源,这是Interface Builder的一个错误。
答案 1 :(得分:6)
根据一位Apple工程师在http://www.mail-archive.com/cocoa-dev@lists.apple.com/msg35673.html的讨论中,Interface Builder中存在一个错误,当用作NSToolbarItem的视图时,“自定义视图”(在IB中创建的NSView)未被正确解码,并且所以不要出现在工具栏中。其他类型的NSView,如NSButtons和NSBoxes,可以很好地用作工具栏项:您可以在Interface Builder中创建它们,然后将它们拖到工具栏中,使它们成为工具栏项。
(上面链接中的讨论意味着错误归结于如何在运行时从XIB创建“自定义视图”:使用initWithFrame:而不是initWithCoder:。讨论的日期是2009年,但仍然没有从XCode 4.5 / OS X 10.8开始修复。)
在我的情况下,我使用常规NSView来包装一组控件(音量滑块和最小/最大按钮),而不是实现自定义NSView子类。通过使用NSBox作为容器而不是NSView,我能够避免这个问题:我使NSBox透明,无标题和无边框,因此它的行为与纯NSView包装器完全相同。这在IB中的工作量稍微多一些,但是省去了以编程方式将视图连接到工具栏项目的麻烦。