swiftnsbuttonnscontrol

Where is NSControl's addTarget() method?


So I haven't looked at Swift/Cocoa in several years. I just created a simple macOS app using Xcode 10.0 and see that NSControl no longer has an addTarget(...) method. It looks like it was replaced by a target property of type id.

How do I go about adding handlers for things like button clicks now since I need to specify the action (e.g. click), object to be called, and the selector to call on that object.


Solution:

let statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
statusItem.button?.target = self
statusItem.button?.action = #selector(didClick(_:))

Solution

  • Right, the method based syntax foo.addTarget(self) has been replaced with the property based syntax foo.target = self. It still exists in UIKit because in Cocoa Touch you have to specify also the control event.

    And all relevant NSControl subclasses have init methods to pass target and action