【问题标题】:Customizing a NSButtonCell with images and highlighting使用图像和突出显示自定义 NSButtonCell
【发布时间】:2011-08-06 01:13:20
【问题描述】:

我想为我的应用程序创建一个自定义开关,在其中我为可能的状态(开、关、鼠标按下)提供三个图像。整个外观都包含在图像中,所以我不希望 Cocoa 在鼠标按下时自己突出显示(变暗)按钮。

目前,我创建了一个 NSButtonCell 子类,将 NSButtonTypeMomentaryChange 的斜角按钮拖到我的视图中,并将按钮单元类类型自定义设置为我的子类。子类只是实现了 awakeFromNib 来尝试设置一些期望的行为:

- (void)awakeFromNib
{
    [self setShowsStateBy:NSContentsCellMask];
    [self setHighlightsBy:NSContentsCellMask];
}

我认为(根据文档)会禁用按钮的鼠标向下变暗。它没有。

这就是我的立场,现在我有两个问题:

  • 如何将 ButtonCell 类设置为仅在鼠标按下时显示我准备好的图片而不使按钮变暗/在按钮周围绘制边框?
  • 实现开关的其他行为(即根据之前的状态显示关闭/开启位置并能够将其状态正确地传达给其他对象)的最简洁/最合适的方法是什么?

【问题讨论】:

    标签: cocoa macos


    【解决方案1】:

    将按钮的类型设置为开/关。子类其单元格。 写这两个方法:

    - (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
    {
        if ([self state])
        {
            [onStateImage drawInRect:cellFrame fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0];
        }
        else
        {
            [offStateImage drawInRect:cellFrame fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0];
        }
    } 
    - (void)highlight:(BOOL)flag withFrame:(NSRect)cellFrame inView:(NSView *)controlView
    {
        if (flag){
            [downStateImage drawInRect:cellFrame fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0];
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-08-28
      • 1970-01-01
      • 1970-01-01
      • 2011-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      相关资源
      最近更新 更多