如何禁用工具栏中的“使用小尺寸”选项?我正在使用Xcode 4。
(这是用户去自定义工具栏时出现的选项。)
答案 0 :(得分:4)
如果您没有在Mac App Store上发布,并且不介意对私有方法进行子类化,则可以创建NSToolbarSubclass
并覆盖_allowsSizeMode:
以返回NO
:
- (BOOL)_allowsSizeMode:(NSToolbarSizeMode)mode {
return mode != NSToolbarSizeModeSmall;
}
这样做还有一个好处,就是从自定义表中删除复选框。
答案 1 :(得分:2)
感谢Rob Keniger的出色表现。如果您可以将自定义工具栏作为窗口的委托,则可以避免在工作表显示在屏幕上之前获取“使用小尺寸”。通过在自定义工具栏类中实现[NSToolbar窗口:willPositionSheet:usingRect:]来完成此操作。在代码的其他地方,您需要执行以下操作:
[myWindowWithToolbar setDelegate:myInstanceOfXXToolbar];
这是更新的自定义工具栏类:
@implementation XXToolbar
- (void)setSizeMode:(NSToolbarSizeMode)aSizeMode
{
[super setSizeMode:NSToolbarSizeModeRegular];
}
- (NSRect)window:(NSWindow *)window willPositionSheet:(NSWindow *)sheet usingRect:(NSRect)rect {
NSView *buttonView = nil;
for(NSView* view in [[sheet contentView] subviews])
{
if([view isKindOfClass:[NSButton class]])
{
if([[[(NSButton*)view cell] valueForKey:@"buttonType"] integerValue] == NSSwitchButton)
{
buttonView = view;
break;
}
}
}
if (buttonView) {
[buttonView setHidden:YES];
// This is important as it causes the sheet to redraw without the button off screen
[[sheet contentView] display];
}
return rect;
}
@end
希望你觉得这很有用。
答案 2 :(得分:1)
您可以继承NSToolbar
,覆盖-setSizeMode:
并在您的实施中调用[super setSizeMode: NSToolbarSizeModeRegular];
。
如果要在Interface Builder中实例化工具栏,请确保将子类分配给nib中的工具栏。
@implementation RKToolbar
- (void)setSizeMode:(NSToolbarSizeMode)aSizeMode
{
[super setSizeMode:NSToolbarSizeModeRegular];
}
@end
这不会从自定义面板中删除该复选框,但会阻止它执行任何操作。
删除复选框并不是一种支持的方法。这确实有效,但它非常hacky:
//in your NSToolbar subclass
- (void)runCustomizationPalette:(id)sender
{
[super runCustomizationPalette:sender];
NSWindow* toolbarWindow = [NSApp mainWindow];
NSWindow* sheet = [toolbarWindow attachedSheet];
for(NSView* view in [[sheet contentView] subviews])
{
if([view isKindOfClass:[NSButton class]])
{
if([[[(NSButton*)view cell] valueForKey:@"buttonType"] integerValue] == NSSwitchButton)
{
[view setHidden:YES];
}
}
}
}
答案 3 :(得分:0)
这是@ MacGreg解决方案的Swift 2.2版本。您可以将NSWindowDelegate
保留在任意位置,只需确保至少调用以下内容:
var toolbar: UniformToolbar!
func window(window: NSWindow, willPositionSheet sheet: NSWindow, usingRect rect: NSRect) -> NSRect {
toolbar.removeSizeToggle(window: sheet)
return rect
}
class UniformToolbar: NSToolbar {
override var sizeMode: NSToolbarSizeMode {
get {
return NSToolbarSizeMode.Regular
}
set { /* no op */ }
}
func removeSizeToggle(window window: NSWindow) {
guard let views = window.contentView?.subviews else { return }
let toggle: NSButton? = views.lazy
.flatMap({ (view: NSView) -> NSButton? in view as? NSButton })
.filter({ (button: NSButton) -> Bool in
guard let buttonTypeValue = button.cell?.valueForKey("buttonType")?.unsignedIntegerValue,
buttonType = NSButtonType(rawValue: buttonTypeValue)
else { return false }
return buttonType == .SwitchButton
})
.first
toggle?.hidden = true
window.contentView?.display()
}
}