Table of Contents
NSView に背景色を設定したい場合は、そのサブクラスを作り、メソッドをオーバーライドしてコードを変更します。
今回は、背景色を変えられる NSView の作り方と、それを利用したサンプルアプリを紹介します。
サンプルアプリのコード
Cocoa Application のプロジェクトを新規作成し、生成された ViewController.swift を以下のように変更します。
import Cocoa
class ViewController: NSViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        // 背景色のあるNSView
        let colorView = ColorView(
                frame: CGRect(x: 100, y: 100, width: 200, height: 200), 
                color: NSColor.green
        )
        self.view.addSubview(colorView)
        
        // 子要素となるテキストフィールド
        let textField = NSTextField(string: "これは背景色付きのNSView")
        textField.sizeToFit()
        textField.frame.origin = NSPoint(x: 20, y: 20)
        colorView.addSubview(textField)
    }
}
// 背景色を設定可能なNSView
class ColorView: NSView {
    
    var backgroundColor: NSColor?
    
    init(frame: NSRect, color: NSColor) {
        super.init(frame: frame)
        backgroundColor = color
    }
    
    required init?(coder decoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    override func draw(_ dirtyRect: NSRect) {
        super.draw(dirtyRect)
        
        if let color = backgroundColor {
            color.setFill()
            dirtyRect.fill()
        }
    }
}
NSView を継承して、背景色(backgroundColor)を設定できるようにしたクラスが ColorView です。
このクラスの中では、色(NSColor)を取得できるコンストラクタを追加し、さらに NSView のメソッドである draw(_ dirtyRect: NSRect) をオーバーライドして、背景色を描画する処理を追加しています。
サンプルの実行結果
以下のように、背景色が追加された NSView の子要素として NSTextField が表示されます。
以上、背景色を設定できる NSView のサブクラスのサンプルでした。

