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 のサブクラスのサンプルでした。

