当我禁用按钮时,有没有办法防止文本变灰?

时间:2011-06-18 15:39:19

标签: objective-c cocoa macos

当我将按钮设置为禁用时,文本变为灰色(之前为黑色)。 在我的窗口中,结果是禁用按钮时文本不可读。

我在NSButton / NSButtonCell / NSCell / NSControl的文档中查看过,但我没有找到任何方法将文本保持黑色。你知道我怎么做吗?

3 个答案:

答案 0 :(得分:0)

您可以在IB中为每个州设置按钮属性(字体,颜色)。那么将禁用状态的文本颜色设置为黑色帮助吗?

答案 1 :(得分:0)

子类NSButtonCell并将其分配给IB中的按钮CELL(不是BUTTON直接 - >更深一级)。在子类中,根据需要实现以下和修改大小,字体和颜色:

- (NSAttributedString*)attributedTitleForString:(NSString*)string
{
    // Colors
    NSColor *disabledColor = [NSColor grayColor];
    NSColor *enabledColor = [NSColor redColor];

    // Font
    NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
    [style setAlignment:NSLeftTextAlignment];
    NSFont *font = [NSFont systemFontOfSize:11];

    // Enabled
    NSDictionary *enabledAttrsDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
                                        enabledColor, NSForegroundColorAttributeName,
                                        style, NSParagraphStyleAttributeName,
                                        font, NSFontAttributeName,
                                        nil];
    NSAttributedString* enabledTitle = [[NSAttributedString alloc]initWithString:string attributes:enabledAttrsDictionary];

    // Disabled
    NSDictionary *disabledAttrsDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
                                         disabledColor, NSForegroundColorAttributeName,
                                         style, NSParagraphStyleAttributeName,
                                         font, NSFontAttributeName, nil];

    NSAttributedString* disabledTitle = [[NSAttributedString alloc]initWithString:string attributes:disabledAttrsDictionary];

    if (![self isEnabled])
        return disabledTitle;
    else
        return enabledTitle;
}

编辑:仅当setWantsLayers为false时才有效

答案 2 :(得分:-1)

在cocoa touch上有一个API:

[myButton setTextColor:[UIColor blackColor] forState:UIControlStateDisabled];

对于可可我不知道。