NSTableView で行選択時のハイライト表示を無効化する

Cocoa プログラミング

NSTableView で行をクリックすると行全体がハイライト表示されるのですけど、強い青でコンテンツが見にくくなってしまうので、選択しても色がつかないようにしてみました。


View ベースの NSTableView を使ってみたら、行を選択した時にその行全体の背景色がハイライト表示されるようになっていましたが、そのハイライトされる色が既定では強い青色で、コンテンツがとても見にくい印象です。

この色は、NSTableView がアクティブの時は NSColor.alternateSelectedControlColor の色が、そうでなければ NSColor.secondarySelectedControlColor の色が採用されるようなのですけど、これをテーブル毎にその都度変えて使うわけにはいかなそうです。

この色を変えられる手立てとしては NSTableViewselectionHighlightStyle を使って幾つかのパターンの中から選択する方法が用意されているようでしたので、それを使ってみることにしました。

NSTableViewSelectionHighlightStyle

この selectionHighlightStyle が扱う NSTableViewSelectionHighlightStyle には、次の 3 つのパターンが用意されているようでした。

識別子 Raw 値 ハイライトのされ方
None -1 ハイライト表示を行わない
Regular 0 既定の色で塗り潰す
SourceList 1 既定の色をグラデーションで柔らかめに塗る

NSTableView にスタイルを設定する

この設定は Interface Builder から簡単に行えるようになっていました。

設定したい NSTableView を Interface Builder から選択して、属性インスペクターの Highlight を選択することで、そのスタイルが適用されます。

ソースコードから指定したい場合

ソースコードからスタイルを指定したい場合には、NSTableView が持っている selectionHighlightStyleプロパティ に値を設定します。

たとえば、テーブルビューがアウトレットにセットされたときにスタイルを変更したい場合であれば、次のようなコードになります。

@IBOutlet weak var timelineTableView:NSTableView! {
	
	didSet {

		self.myTableView.selectionHighlightStyle = .None
	}
}

スタイルの種類と表示の様子

スタイルによる色味は OS の種類によって変わってきたりもするでしょうけど、とりあえず OS X El Capitan 10.11.0 でどのような見え方をするのか整理しておきます。

NSTableViewSelectionHighlightStyle.None

この中の None は、全くハイライトを行いません。これを設定することで、選択されても全く反応を示さない(ように見える)行が出来上がります。

NSTableViewSelectionHighlightStyle.Regular

そして Regular が既定の設定で、これを設定することで、選択された行がまさに既定の色で塗り潰されます。

ただし、先ほどの色はテーブルビューがアクティブな場合の色で、非アクティブになった時には次のような色合いに変わります。

NSTableViewSelectionHighlightStyle.SourceList

もう一つ SourceList というのがあって、これを設定することで、選択行が既定色を柔らかい感じにグラデーションで塗りつぶしたものになります。

そして、非アクティブの時の色合いも Regular よりも柔らかくなった印象を受けます。

そしてもう一つ面白いのが、この SourceList を設定した場合、選択していない時の色合いもわずかにグレーになるところです。

この色合いはちょうど、Xcode のプロジェクトナビゲーターの色合いと同じようなので、このようなファイルリストみたいなテーブルを表現するときにこのスタイルを設定してあげる形になるのでしょう。