如何编写NSButton看起来就像图像

时间:2010-12-26 12:08:28

标签: nstableview nsimage nsbutton

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

感谢。

3 个答案:

答案 0 :(得分:19)

我知道这个回复有点迟了,但你可以尝试这个,给定thisButton

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

最后一行是关键位:删除按钮边框有效地剥离了它的边框,只留下图像点击。 (顺便说一下,我没有特别尝试上面的代码,所以你可能需要进行一些其他调整,比如设置imageScalingbuttonType,以使其发挥最佳效果。)

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

答案 1 :(得分:1)

如果您不想使用模板,但仍然希望按下 highlight ,则还可以对NSButton使用以下设置:

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

要使高光效果在任何图像上起作用,重要的是将bezelStyle设置为shadowlessSquare

我知道这个问题不是必需的,但对其他人可能有用。

答案 2 :(得分:0)

禁用isBordered

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

button.isBordered = false