2015-01-19 34 views
6

Programlı olarak Swift kullanarak yeni bir pencere oluşturmak istiyorum ama Başarılı bir yol bulamadım. Bu basit kod yeni bir pencere göstermiyor. Kodumun nesi var?Program aracılığıyla 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

"Ya benim koduyla yanlış?" Açıkça yanlış olan bir şey, tüm değişkenlerin yerel olmasıdır. Böylece pencere denetleyiciniz ve pencereniz, işlev sona erdiğinde dumanın her ikisinde de kayboluyor. Onlar tamamen geçici nesnelerdir. – matt

+0

Keşke bunun için bir çeşit uygun dökümantasyon olması dileğiyle. Bulamadı. – DisplayName

cevap

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

Otomatik düzen, bu tarzda yapılırsa bir kraliyet acısı olmalı :) –

+0

Gerçekten de, ama github (https://github.com/SnapKit/Masonry) bir göz atın ve diğer birkaç seçenek de var (ReactiveCocoaLayout sizin gibi RX/Reaktifiniz varsa iyi bir tane) –

+3

Bu benim için çalışmıyor – DisplayName

İlgili konular