I want to be able to add a button to the title bar of all windows that open on a Mac.
The button will go on the right hand side, opposite the X - +
buttons.
This is asked about windows of my app here:
How can I create Yosemite-style unified toolbar in Interface Builder?
But I want the button to appear on all windows, of any app, that are opened on the Mac. Obviously, this will only happen once the user has installed this program.
I understand that this is essentially "plugging into" the OS's UI, but I have seen other apps do this, which makes me feel that it is do-able.
Here is screenshot where I want the button:
The officially-supported way to add a title bar button in OS X 10.10 (Yosemite) and later is by creating an NSTitlebarAccessoryViewController
and adding it to your window using -[NSWindow addTitlebarAccessoryViewController]
.
For example, I have a window that has a title bar accessory view:
To set this up, I started by adding a standalone view to the window controller scene in my storyboard. (You don't have to use a storyboard but I did in this project.)
My accessory view is an NSView
with an NSButton
subview. The button title uses Font Awesome to display the pushpin.
I connected the accessory view to an outlet (cleverly named accessoryView
) in my NSWindowController
subclass:
Then, in my window controller's windowDidLoad
, I create the NSTitlebarAccessoryViewController
, set its properties, and add it to the window:
@IBOutlet var accessoryView: NSView!
var accessoryViewController: NSTitlebarAccessoryViewController?
override func windowDidLoad() {
super.windowDidLoad()
createAccessoryViewControllerIfNeeded()
}
fileprivate func createAccessoryViewControllerIfNeeded() {
guard self.accessoryViewController == nil else { return }
let accessoryViewController = NSTitlebarAccessoryViewController()
self.accessoryViewController = accessoryViewController
accessoryViewController.view = accessoryView
accessoryViewController.layoutAttribute = .right
self.window?.addTitlebarAccessoryViewController(accessoryViewController)
}
This answer addresses the latest Xcode Version 9.3
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With