NSTableView で行選択時のハイライト表示を無効化する
Cocoa プログラミング
NSTableView で行をクリックすると行全体がハイライト表示されるのですけど、強い青でコンテンツが見にくくなってしまうので、選択しても色がつかないようにしてみました。
View ベースの NSTableView
を使ってみたら、行を選択した時にその行全体の背景色がハイライト表示されるようになっていましたが、そのハイライトされる色が既定では強い青色で、コンテンツがとても見にくい印象です。
この色は、NSTableView
がアクティブの時は NSColor.alternateSelectedControlColor
の色が、そうでなければ NSColor.secondarySelectedControlColor
の色が採用されるようなのですけど、これをテーブル毎にその都度変えて使うわけにはいかなそうです。
この色を変えられる手立てとしては NSTableView
の selectionHighlightStyle
を使って幾つかのパターンの中から選択する方法が用意されているようでしたので、それを使ってみることにしました。
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 のプロジェクトナビゲーターの色合いと同じようなので、このようなファイルリストみたいなテーブルを表現するときにこのスタイルを設定してあげる形になるのでしょう。