14

使用代码(不是界面生成器)我需要创建一个NSButton看起来像图像的东西。具体来说,我想使用NSImageNameStopProgressFreestandingTemplate它,我不需要它看起来像按钮,而是看起来像图像。这意味着:
1. 没有“按下按钮”的外观
2. 没有边框,按钮没有任何可见性

谢谢。

4

3 回答 3

21

我知道这个回复有点晚了,但你可以试试这个,因为thisButton

[thisButton setImage:[NSImage imageNamed:NSImageNameStopProgressFreestandingTemplate]];
[thisButton setImagePosition:NSImageOnly];
[thisButton setBordered:NO];

最后一行是关键位:移除按钮边框有效地将其从边框剥离,只留下可点击的图像。(顺便说一句,我没有专门尝试过上面的代码,所以您可能需要进行一些其他调整,例如设置imageScalingor buttonType,以使其发挥最佳效果。)

最后一点:如果您使用的是模板图像(正如您所说的那样),Cocoa 会自动以轻微的深灰色渐变显示它;单击按钮时,它会暂时变暗为纯黑色。这是您不想要的自动“按钮向下”外观;然而,它非常微妙,并且是按钮工作的一个很好的指标。如果您不希望这种情况发生,您可以获取所需图像的实例并[stopImage setTemplate:NO];在其上。

于 2011-08-19T19:31:03.460 回答
1

禁用isBordered

let button = NSButton(
  image: NSImage(named: NSImage.Name("plus"))!,
  target: self,
  action: #selector(onButtonPress)
)

button.isBordered = false
于 2019-03-18T09:51:49.350 回答
1

如果您不想使用模板但无论如何都希望下推突出显示,您还可以使用以下设置NSButton

let imageButton = NSButton()
imageButton.image = NSImage(named: "MyImage")!
imageButton.bezelStyle = .shadowlessSquare
imageButton.isBordered = false
imageButton.imagePosition = .imageOnly

使高光在任何图像上起作用的重要事情是设置bezelStyleshadowlessSquare.

我知道问题中没有要求这种行为,但它可能对其他人有用。

于 2020-06-10T11:36:24.813 回答