Programtically에서 NSWindow 생성

Programtically에서 NSWindow 생성


제목과 같이 Interface Builder(이하 IB)를 사용하지 않고 코드를 사용하여 다른 창을 생성하는 방법에 대해 설명합니다.또한 생성 창의 표시, 닫기, 폐기 방법을 간단하게 소개한다.

IB에서 주 창 만들기



Create 및 Close 버튼을 간단하게 만듭니다.
Create 버튼을 눌러 NSWindow를 생성한 다음 생성된 NSWindow를 표시하려면 를 누릅니다.
Close 버튼은 생성된 NSWindow를 버리지 않고 닫기 기능을 사용합니다.

수정 2015.Nov


Swift 2.0 이후에는 NSWindow 생성 방법의 마지막 매개 변수 defer에 대해 "포위"를 사용해야 한다.
main.c
self.window = NSWindow(contentRect: NSMakeRect(0, 0, 640,480),
                styleMask: NSTitledWindowMask|NSResizableWindowMask|NSMiniaturizableWindowMask|NSClosableWindowMask,
                backing: NSBackingStoreType.Buffered,
                `defer`: false)

코드


main.c
import Cocoa
import Foundation

class ViewController: NSViewController {

    //生成するwindow
    var windowA:NSWindow?
    //生成完了後はtrue
    var windowAFlag:Bool = false
    //windowAをコントロールするクラス
    var windowAControl: NSWindowController?

    //CreateボタンのAction
    @IBAction func OpenWindow(sender: AnyObject) {

         //windowが未生成の場合は生成する
        if(!self.windowAFlag){

            self.windowA = NSWindow(contentRect: NSMakeRect(0, 0, 640,480), styleMask: NSTitledWindowMask|NSResizableWindowMask|NSMiniaturizableWindowMask|NSClosableWindowMask, backing: NSBackingStoreType.Buffered, defer: false)

            self.windowA!.title = "New Window"
            self.windowA!.opaque = false
            self.windowA!.center()
            self.windowA!.movableByWindowBackground = true
            self.windowA!.backgroundColor = NSColor(calibratedHue: 0, saturation: 1.0, brightness: 0.5, alpha: 0.7)
            self.windowA!.makeKeyAndOrderFront(nil)

            self.windowAControl = NSWindowController(window:self.windowA)

            self.windowAFlag = true

        }else{//windowがすでに生成されている場合はNSWindowControllerを使用してwindowを表示
            self.windowAControl!.showWindow(nil)
        }
    }

    //Closeボタン用のAction
    @IBAction func CloseWindow(sender: AnyObject) {

    //NSWindowクラスのclose()は、生成したwindowを破棄する
        //self.windowA!.close()
    //単純に閉じたい場合はNSWindowControllerのclose()を使う
        self.windowAControl!.close()
    }


    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

    override var representedObject: AnyObject? {
        didSet {
        // Update the view, if already loaded.
        }
    }
}
#결과

참고 자료

좋은 웹페이지 즐겨찾기