xib 파일을 로드하여 NSWindowContrller 보기

개요


  • xib 파일을 읽고 다른 창을 표시하고 싶습니다.


  • Storyboard 에서 NSWindowController (with xib 파일) 보기



  • 참고


  • Xcode에서 최소한의 (아무것도하지 않는) 창을 표시 할 때까지의 단계 - 메모 쓰기
  • Swift4에서 클래스 이름을 얻는 방법 요약 - Qiita

  • 구현


  • NSWindowController 의 클래스를 정의한다. (이 때 xib 파일도 함께 생성)

  • SampleWindowController.swift
    import Cocoa
    
    
    class SampleWindowController: NSWindowController {
    
        // MARK: - Properties
    
        let windowTitle: String
        let message: String
    
        @IBOutlet weak var messageLabel: NSTextField!
    
        // MARK: - Lifecycle
    
        init(withTitle title: String, message: String, window: NSWindow?) {
            self.windowTitle = title
            self.message = message
            super.init(window: window)
        }
    
        required init?(coder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
    
        override func windowDidLoad() {
            super.windowDidLoad()
            configureUI()
        }
    
        override var windowNibName: NSNib.Name? {
            return String(describing: type(of: self))
        }
    
        // MARK: - Helpers
    
        private func configureUI() {
            window?.title = windowTitle
            messageLabel.stringValue = message
        }
    }
    
  • 클래스와 xib 의 연결은 아래의 코드. 이것이 이번 포인트.

  • SampleWindowController.swift
    override var windowNibName: NSNib.Name? {
            return String(describing: type(of: self))
    }
    
  • ViewController 에서 호출하는 방법은 다음과 같습니다.

  • ViewController.swift
    var sampleWindowController: SampleWindowController?
    
    // (中略)
    
    @IBAction func openingWindowButtonClicked(_ sender: Any) {
        let sampleWindowController = SampleWindowController(withTitle: "Title of SampleWindowController",
                                                            message: "passed message for SampleWindowController..",
                                                            window: nil)
        sampleWindowController.showWindow(self)
        self.sampleWindowController = sampleWindowController
    }
    

    좋은 웹페이지 즐겨찾기