how to code NSButton to look just like image
Asked Answered
D

3

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.

Duplicate answered 26/12, 2010 at 12:8 Comment(0)
A
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.

Abductor answered 19/8, 2011 at 19:31 Comment(0)
H
1

Disable isBordered

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

button.isBordered = false
Hypothec answered 18/3, 2019 at 9:51 Comment(0)
D
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.

Dialect answered 10/6, 2020 at 11:36 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.