gpt4 book ai didi

cocoa - 使用图像和突出显示自定义 NSButtonCell

转载 作者:行者123 更新时间:2023-12-03 16:08:59 25 4
gpt4 key购买 nike

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

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

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

我认为(根据文档)会禁用按钮的鼠标按下变暗。事实并非如此。

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

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

最佳答案

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

- (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];

}
}

关于cocoa - 使用图像和突出显示自定义 NSButtonCell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6957115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com