Programming & Music
I’m going to need to display the same popover from many different subviews. I don’t want to have to duplicate the custom view etc in every view XIB so I added a XIB that just contains the resources needed for the popover. In this simple non-Document-based app the AppDelegate is the File’s owner for both the app’s XIB and also for the popover’s:
class AppDelegate: NSObject, NSApplicationDelegate { @IBOutlet weak var window: NSWindow! @IBOutlet var popoverView: NSPopover! func applicationDidFinishLaunching(aNotification: NSNotification) { let loaded = NSBundle.mainBundle().loadNibNamed("PopoverView", owner: self, topLevelObjects: nil) print("Loaded Nib: \(loaded)") }
Note that the IBOutlet above is not ‘weak’. You need this to keep the data resident.
As far as the XIB itself, I added a “View” “User Interface” file. In this XIB, the File’s Owner class is set to AppDelegate. Added a “Popover and View Controller” and connected the XIB’s view to the Popover View Controller’s ‘view’ outlet. Added an IBAction in the App Delegate:
@IBAction func ShowPopover(sender: NSView) { popoverView.showRelativeToRect(sender.bounds, ofView: sender, preferredEdge: NSRectEdge.MinX) }
The popoverView is connected to the File’s Owner in IB. Do whatever way you need to invoke the ShowPopover action — I used a button. I may have forgotten something, but that’s pretty much it.