首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Customize NSToolbar -禁用“使用小尺寸”

Customize NSToolbar -禁用“使用小尺寸”
EN

Stack Overflow用户
提问于 2011-12-02 11:12:13
回答 4查看 2K关注 0票数 2

如何禁用工具栏中的“使用小尺寸”选项?我正在使用Xcode4。

(这是当用户转到自定义工具栏时出现的选项。)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-12-02 21:36:26

你可以子类化NSToolbar,重写-setSizeMode:并在你的实现中调用[super setSizeMode: NSToolbarSizeModeRegular];

如果要在Interface Builder中实例化工具栏,请确保将子类分配给nib中的工具栏。

代码语言:javascript
复制
@implementation RKToolbar
- (void)setSizeMode:(NSToolbarSizeMode)aSizeMode
{
    [super setSizeMode:NSToolbarSizeModeRegular];
}
@end

这不会从customize面板中删除复选框,但会阻止它执行任何操作。

没有一种真正受支持的方法来删除复选框。这是可以工作的,但它很麻烦:

代码语言:javascript
复制
//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];
            }
        }
    }
}
票数 2
EN

Stack Overflow用户

发布于 2014-01-01 22:18:24

如果您没有在Mac App Store上发布,并且不介意将私有方法子类化,那么您可以创建一个NSToolbarSubclass并覆盖_allowsSizeMode:以返回NO

代码语言:javascript
复制
- (BOOL)_allowsSizeMode:(NSToolbarSizeMode)mode {
    return mode != NSToolbarSizeModeSmall;
}

这还有一个额外的好处,那就是从定制表中删除复选框。

票数 4
EN

Stack Overflow用户

发布于 2012-05-02 23:30:15

感谢Rob Keniger的出色开局。如果你可以让你的自定义工具栏作为你的窗口的代理,你可以在页面显示在屏幕上之前,避免让“使用小尺寸”可见。这可以通过在自定义工具栏类中实现NSToolbar window:willPositionSheet:usingRect:来实现。在代码的其他地方,您需要执行以下操作:

代码语言:javascript
复制
[myWindowWithToolbar setDelegate:myInstanceOfXXToolbar];

下面是更新后的自定义工具栏类:

代码语言:javascript
复制
@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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8351346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档