NSTextFieldのdrawsBackgroundは何に使うものなのか?


backgroundColorだけではダメなのか

NSTextFieldやNSTextFieldCellにはdrawsBackgroundというプロパティがあります。 「背景色を描画するかどうか」を明示するためのフラグですが、そもそも何故、そんな面倒なフラグがあるのでしょうか。そもそも「backgroundColorの値がnil以外の場合のみ背景を描画する」ようにすればjQuery風のミニマルな設計になりますよね。しかしその発想は甘いです。

drawsBackgroundの使い道

実はdrawsBackgroundにはとても合理的な使い道があります。 背景色の表示非表示を頻繁に切り替える際のスイッチとして使えるのです。

特にTableView周りではこの仕組を頻繁に使うことになります。特定のセルをハイライトさせたい場合などがまさにそれです。 TableViewのセルはスクロール時に再利用が行われますので、その度にセルの更新処理が必要になります。再利用のたびにbackgroundColorの値を更新しなければならないのです。そうなると毎回NSColorを生成することになります。もしくはNSColorをキャッシュするための変数を作成する必要が出てきます。面倒ですね。

そこでdrawsBackgroundの出番

そこでdrawsBackgroundの出番です。セル初期化のタイミングでbackgroundColorをセットして、あとはdrawsBackgroundの切り替えだけで背景色の表示非表示をコントロール出来るようにすれば、面倒なNSColorの管理とはおさらばです。

広告