我希望禁用 Cocoa 窗口中工具栏按钮(位于右上角)上的 Command + Click 组合。我仍然想让用户显示和隐藏工具栏,但我不希望他们能够选择不同的显示模式(例如小图标,无图标等)。
有人找到办法做到这一点吗?预先感谢。
您不需要子类化 NSToolbar 来执行此操作。 在你的 NSWindowController 子类中,将以下内容放入你的 awakeFromNib 中:
- (void) awakeFromNib
{
NSToolbar *tb = [[self window] toolbar];
[tb setAllowsUserCustomization:NO];
}
您还可以获得避免使用私有 API 的额外好处。
您是否尝试过使用自定义 NSToolbar 子类来重写 setDisplayMode: 和 setSizeMode: 而不执行任何操作?当然,这不会删除菜单项,也不会删除自定义表中的 UI(假设您没有使用 setAllowsUserCustomization: 禁用它),但它可能会阻止他们执行任何操作。
在 macOS 15+ 上,您需要在
allowsDisplayModeCustomization
的 NO
实例上将此新值 NSToolbar
设置为 NSWindow
。最简单的方法是连接一个 IBOutlet
,然后在 awakeFromNib
中执行此操作:
// self.ToolB_All is my NSToolbar
self.ToolB_All.allowsUserCustomization = NO; // for completion
if (@available(macOS 15.0, *)) {
self.ToolB_All.allowsDisplayModeCustomization = NO;
}
在旧系统上,您仍然需要子类化。