import Foundation import AppKit class ExportAccessoryView : NSView { @IBOutlet weak var typeBox: NSPopUpButton! var savePanel: NSSavePanel? = nil func setSavePanel(_ savePanel: NSSavePanel?) { self.savePanel = savePanel } func setPossibleOptions(_ options : Array) { for option in options { typeBox.addItem(withTitle: option.uppercased()) } } @IBAction func changeFileFormat(_ sender: Any) { savePanel?.allowedFileTypes?.removeAll() savePanel?.allowedFileTypes?.append((typeBox.titleOfSelectedItem?.lowercased())!) } } extension NSView { class func fromNib() -> T? { var topLevelObjects : NSArray? guard Bundle.main.loadNibNamed("\(self)", owner: nil, topLevelObjects: &topLevelObjects) else { return nil } return topLevelObjects!.first(where: { $0 is T }) as? T } }