【问题标题】:How can I set title color for a disabled NSButton?(OS X)如何为禁用的 NSButton 设置标题颜色?(OS X)
【发布时间】:2016-09-13 20:12:08
【问题描述】:

我知道我们可以使用这样的属性字符串为按钮设置彩色标题:

let style = NSMutableParagraphStyle()
style.alignment = .Center
button.attributedTitle = NSAttributedString(string: "title",
             attributes: [ NSForegroundColorAttributeName : NSColor.redColor(),
                    NSParagraphStyleAttributeName : style])

事实上,这就是我开始使用红色标题的方式,但它对禁用模式下的标题颜色没有影响(它总是灰色);我想为了设置它,我必须创建NSButton 类的实例并覆盖它的一些与标题颜色相关的方法或覆盖它的一些属性以禁用用户交互(必要时)而不是禁用按钮,但我不知道怎么做。

hereherehere 这个问题有一些可能的 Objective-C 答案。

【问题讨论】:

  • 这是让用户知道按钮被禁用的理想行为。我不建议更改按钮行为。
  • 不要禁用它。只需更改其外观和功能
  • @LeoDabus 我怎样才能让它无法点击?我的意思是当它被按下时它的外观会发生变化(它的颜色变成深灰色)如果不使用禁用模式,我怎样才能阻止这种情况发生?

标签: swift macos cocoa swift2


【解决方案1】:

您是否需要根据它在触摸时不执行任何操作的定义来禁用它?

如果是这样,只需在按钮单击功能中添加一个标志。因此,禁用时按钮颜色可能为红色(示例),但您可以单击它但没有任何反应。然后,如果它是绿色的(示例),那么它将允许它做某事。

您的标志可以是通过 if 语句检查的按钮的颜色或设置一个实际变量。

【讨论】:

  • 然后只需更改按钮的背景颜色,并确保在代码中禁止使用该背景颜色执行任何操作
【解决方案2】:

创建一个 NSButtonCell 子类并将其分配给 IB 中的 CELL(不是按钮)。

然后实施

func drawTitle(_ title: NSAttributedString, 
 withFrame frame: NSRect, 
        in controlView: NSView) -> NSRect

并为 isEnabled 或 !isEnabled 返回不同的属性字符串。

您也可以在

中设置初始属性标题
init (id)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-27
    • 2010-10-10
    相关资源
    最近更新 更多