Programmatically create NSWindow

I want to programmatically create a new NSWindow, but I cannot find a way to succeed. This simple code does not display a new window. What is wrong with him?

@NSApplicationMain class AppDelegate: NSObject, NSApplicationDelegate { @IBOutlet weak var window: NSWindow! func applicationDidFinishLaunching(aNotification: NSNotification) { let win = NSWindow(contentRect: NSMakeRect(100, 100, 600, 200), styleMask: NSResizableWindowMask, backing: NSBackingStoreType.Buffered, defer: true) let controller = NSWindowController(window: win) controller.showWindow(self) win.makeKeyAndOrderFront(win) } } 
+10
source share
2 answers

Xcode 11 β€’ Swift 5.1

 import Cocoa @NSApplicationMain class AppDelegate: NSObject, NSApplicationDelegate { @IBOutlet weak var window: NSWindow! let newWindow = NSWindow(contentRect: .init(origin: .zero, size: .init(width: NSScreen.main!.frame.midX, height: NSScreen.main!.frame.midY)), styleMask: [.closable], backing: .buffered, defer: false) func createNewWindow() { newWindow.title = "New Window" newWindow.isOpaque = false newWindow.center() newWindow.isMovableByWindowBackground = true newWindow.backgroundColor = NSColor(calibratedHue: 0, saturation: 1.0, brightness: 0, alpha: 0.7) newWindow.makeKeyAndOrderFront(nil) } func applicationDidFinishLaunching(_ aNotification: Notification) { createNewWindow() } func applicationWillTerminate(_ aNotification: Notification) { // Insert code here to tear down your application } } 

Window style mask

Project example

+12
source

Here is a working example without bells whistles, updated to Swift 4.2.

Creates a bare window with & without tip, depending on what function you call.

In IB, uncheck the "start controller" everywhere. For the pen version to work, you must provide the "WindowController" storyboard ID in the supplied IB window controller.

  import Cocoa @NSApplicationMain class AppDelegate: NSObject, NSApplicationDelegate, DebugHelper { var myName: String = "AppDelegate" var windowController: NSWindowController! var window: NSWindow! func applicationDidFinishLaunching(_ aNotification: Notification) { //nib() diy() } func nib() { let storyboard = NSStoryboard(name: NSStoryboard.Name("Main"), bundle: nil) guard let wc = storyboard.instantiateController(withIdentifier: "WindowController") as? NSWindowController else { return } windowController = wc wc.showWindow(self) } func diy() { window = NSWindow() window.styleMask = NSWindow.StyleMask(rawValue: 0xf) window.backingType = .buffered window.contentViewController = ViewController() window.setFrame(NSRect(x: 700, y: 200, width: 500, height: 500), display: false) windowController = NSWindowController() windowController.contentViewController = window.contentViewController windowController.window = window windowController.showWindow(self) } func applicationWillTerminate(_ aNotification: Notification) { // Insert code here to tear down your application } } import Cocoa class ViewController: NSViewController, DebugHelper { var myName: String = "ViewController" override func loadView() { view = NSView() } } 
0
source

Source: https://habr.com/ru/post/981234/


All Articles