14

Using code (not the Interface builder) I need to create an NSButton that looks like an image. Specifically I want to use NSImageNameStopProgressFreestandingTemplate and I need it not to look like button but to look like the image. This means:
1. No 'button down' look
2. No border, no any visibility of the button

Thanks.

OZG
  • 499
  • 6
  • 16

3 Answers3

21

I know this response is a bit late, but you could try this, given thisButton:

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

That last line is the key bit: removing the button border effectively strips it of its bezel, leaving only the image to click on. (BTW, I haven't tried the above code specifically, so you may need to throw in a couple of other tweaks, such as setting the imageScaling or buttonType, to get it to work best.)

One final note: If you're using a template image (as you said you would), Cocoa will automatically display it with a slight dark-grey gradient; when the button is clicked, it will momentarily darken to solid black. This is an automatic "'button down' look" you didn't want; however, it is very subtle, and is a good indicator that the button worked. If you don't want this to happen, you could get an instance of the desired image and [stopImage setTemplate:NO]; on it.

Taldar
  • 211
  • 2
  • 3
1

Disable isBordered

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

button.isBordered = false
onmyway133
  • 38,911
  • 23
  • 231
  • 237
1

If you don't want to use a templated but want the push down highlight anyways, you can also use the following setup for an NSButton:

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

The important thing to make the highlight work on any image is to set bezelStyle to shadowlessSquare.

I know this behavior wasn't requested in the question, but it might be useful for others.

Codey
  • 779
  • 1
  • 7
  • 25