NSToolbar特殊区域

3

我想要完全接管NSToolbar所在的区域,以便放置自定义控件、视图和背景。使用此区域的优点包括:

  • 任何滑动面板都会出现在工具栏区域下方,而不仅仅是标题栏。
  • 在Lion中,当鼠标位于屏幕顶部时,工具栏区域也会随着菜单栏一起下拉。

我尝试过使用无边框窗口,并在其中实现自己的自定义视图,但不幸的是,我失去了上述优势,同时还有一些其他小问题。

我的当前方法是使用未记录的方法“_toolbarView”与NSToolbar,并将我的自定义视图添加到其子视图中。这很好用,因为我可以关闭工具栏自定义。不幸的是,工具栏的大小是由其中的项目初始化的。有人知道是否可以在不添加虚假的ToolbarItem的情况下更改工具栏的大小吗?

也许还有一种更好的方法,我目前还不知道。感谢任何建议和评论。

1个回答

5
不需要使用任何未记录的API。只需创建一个带有自定义视图的工具栏项:
- (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag {
    NSToolbarItem *item = [[[NSToolbarItem alloc] initWithItemIdentifier:itemIdentifier] autorelease];
    …
    [item setView:myCustomToolbarView];
    …
}

您可以通过设置项目的minSizemaxSize属性来控制自定义工具栏的大小(例如,在您的NSWindowDelegate-windowDidResize:中)。

请记得更新工具栏显示模式,以便不显示项目标签:

[toolbar setDisplayMode: NSToolbarDisplayModeIconOnly];

我想这可能就是了!谢谢。 - AndyTang
似乎nstoolbaritem不会到达工具栏区域的边缘,总是有大约5个像素的填充。有什么办法可以去掉这个边框吗? - AndyTang
我模糊地记得Panic的团队在Coda中遇到过这个问题。我认为没有解决方案(至少没有记录在API中)。你可以尝试使用纹理窗口,并适当设置顶部内容边框的厚度([window setContentBorderThickness:123.0 forEdge:NSMaxYEdge])。 - gcbrueckmann
还有一件事:如果您想控制表格(“滑动面板”)出现的位置,请使用NSWindowDelegate方法-window:willPositionSheet:usingRect: - gcbrueckmann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接