【swift】 NSTableView で文字色変更 【cocoa】


こちらの記事 でテーブル・ビューにテキストを表示できたのですが、書式(というか文字色を)変えたくなって調べたところ、ネット検索して引っ掛かる内容がワタシの環境では使えないものが多かったので備忘録。

検索結果の中で、簡単に実装できそうだったのが、

 func tableView(tableView: NSTableView, willDisplayCell cell: (id)cell, forTableColumn tableColumn: NSTableColumn?, row: Int)

を使って、cell.setTextColor(NSColor.blackColor()) とかやる方法。

しかし、これ、wilDisplayCell が AnyObject になってて使えない。

しょうがないので、面倒臭そうだけど、NSAttributedString を使うことに。
というわけで、前回のコードを改造。

 func tableView(tableView: NSTableView!, objectValueForTableColumn tableColumn: NSTableColumn!, row: Int) -> AnyObject!
 {
 // var string:String = "row " + String(row) + ", Col" + String(tableColumn.identifier) 
 // return string
  var newString = getDataArray().objectAtIndex(row).objectForKey(tableColumn.identifier) as? NSAttributedString //String から変更して、NSAttributedString を表示させるようにする
  println(newString)
  return newString;
 }



で、こちらも NSAttributedString を使えるように変更。

func getDataArray () -> NSArray {

  // 設定したいアトリビュート 文字色を赤に
  let attr = [ NSForegroundColorAttributeName: NSColor.redColoe() ]

  //NSAttribtedString(string: String, attributed: attributed) を使ってアトリビュートを指定
  var dataArray: [Dictionary] = [["FirstName": NSAttributedString(string: "Debasis", attributes: attr),
    "LastName": NSAttributedString(string: "Das", attributes: attr)],
    ["FirstName": NSAttributedString("Nishant", attributes: attr),
    "LastName": NSAttributedString(string: "Singh", attributes: attr)],
    ["FirstName": NSAttributedString(string: "John", attributes: attr),
    "LastName": NSAttributedString(string: "Doe", attributes: attr)],
    ["FirstName": NSAttributedString(string: "Jane", attributes: attr),
    "LastName": NSAttributedString(string: "Doe", attributes: attr)],
    ["FirstName": NSAttributedString(string: "Mary", attributes: attr),
    "LastName": NSAttributedString(string: "Jane", attributes: attr)]];

  println(dataArray);
  return dataArray as NSArray;  // as NSArray を追加
 }



これを使うと、アラインやフォントもデフォルト設定(IBなどで設定した値ではない)になってしまうみたいなので、デフォルト以外の設定を使いたい場合は一緒に設定してやると良いかと。

こんな感じでできました。

とはいえ、ワタシの環境も古いので、最新版の開発環境では、もっとシンプルに実装できるのかもしれない。

スポンサーサイト

コメント

非公開コメント