2015-01-19 20 views
6

Voglio creare a livello di programmazione una nuova finestra utilizzando Swift ma Non riesco a trovare un modo per avere successo. Questo semplice codice non mostra una nuova finestra. Cosa c'è che non va nel mio codice?Creare a livello di programmazione NSWindow in Swift

@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) 
    } 
} 
+3

"Cosa c'è di sbagliato con il mio codice?" Una cosa che è ovviamente sbagliata è che tutte le variabili sono locali. Quindi il tuo controller di finestre e la tua finestra svaniscono in una nuvola di fumo quando la funzione termina. Sono oggetti puramente temporanei. – matt

+0

Vorrei che ci fosse una sorta di documentazione adeguata su questo. Non ho trovato nessuno. – DisplayName

risposta

6
import Cocoa 

@NSApplicationMain 
class AppDelegate: NSObject, NSApplicationDelegate { 
    let newWindow = NSWindow(contentRect: NSMakeRect(0, 0, NSScreen.main()!.frame.midX, 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(_ notification: Notification) { 
     createNewWindow() 
    } 
    func applicationWillTerminate(_ notification: Notification) { 
     // Insert code here to tear down your application 
    } 
} 

Window Style Mask

+0

Il layout automatico deve essere un dolore reale se fatto in questo stile :) –

+0

In effetti lo è, ma date un'occhiata a Masonry su github (https://github.com/SnapKit/Masonry) e ci sono anche alcune altre opzioni (ReactiveCocoaLayout è una buona soluzione se si utilizza RX/Reactive) –

+3

Quello non funziona per me – DisplayName

Problemi correlati