使用代码(而不是“界面”构建器)我需要创建一个看起来像图像的NSButton
。具体来说,我想使用NSImageNameStopProgressFreestandingTemplate
,我需要它不看起来像按钮,但看起来像图像。这意味着:
1.没有'按下'看起来
2.没有边框,没有按钮的可见性
感谢。
答案 0 :(得分:19)
我知道这个回复有点迟了,但你可以尝试这个,给定thisButton
:
[thisButton setImage:[NSImage imageNamed:NSImageNameStopProgressFreestandingTemplate]];
[thisButton setImagePosition:NSImageOnly];
[thisButton setBordered:NO];
最后一行是关键位:删除按钮边框有效地剥离了它的边框,只留下图像点击。 (顺便说一下,我没有特别尝试上面的代码,所以你可能需要进行一些其他调整,比如设置imageScaling
或buttonType
,以使其发挥最佳效果。)
最后一点说明:如果您正在使用模板图像(正如您所说的那样),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