How to enable / disable the zoom button (green + button)?


Question or issue on macOS:

I’m new in Mac OSx / Cocoa development. During the creation of my first app, I bumped into a few things, and one of which is my issue on the green + button which is intended for zooming purposes.

I’d like to know if it is possible to dynamically set the behavior of the zoom button of the app window? Am I not violating any rule from Apple’s guidelines?

I want to specify the behavior of the button according to a specific user. Say, the user is allowed to have a zooming button, then the button should be enabled; otherwise, leave the button disabled.

In this case, when the app is launched, I am checking if the user is allowed to have an enabled zoom button. From here I want to customize the behavior of the window pertaining to the zoom button – whether it should be enabled or disabled according to the prior checking of the user’s mode.

Thanks ahead for the help!

How to solve this problem?

Solution no. 1:

You can get a reference to that button with standardWindowButton:NSWindowZoomButton, and then do whatever you can do with any NSButton.

Update (in swift):

var button = view.window?.standardWindowButton(NSWindowButton.ZoomButton)
button?.enabled = false

Solution no. 2:

Grabbing the button and setting enabled is not ideal. The best way (10.6+) is to use setStyleMask:. Here’s how to do this:

window.styleMask = NSTitledWindowMask | NSClosableWindowMask

You can add or remove styles at will. Another way to do this without changing the style is to set minSize and maxSize to the same size. This will also disable resizing.

Solution no. 3:

In Swift 3, here is the easiest way to remove the ability:

var style = window.styleMask
window.styleMask = style

I commonly do this in viewDidAppear for view controllers in storyboards that have a window controller created for them automatically instead of one I can mess with.

Hope this helps!