Swift:NSTableViewのカラムの操作

よく考えてみると、カラムをどう操作していいのか、真剣に考えていませんでした。

ポイントは、処理するカラムの定義をNSTableColumn(identifier:String)で行い、これを修飾して操作すればカラム見出しの設定やwidth、minwidth、maxwidthの設定ができます。列の追加もこれを使います。カラム数は.numberOfColumnsでわかるので、identifierにカラム位置を設定するようにすれば、これをループ条件にできます。

NSTableViewの定義:
@IBOutlet var   xqTVMethod: NSTableView?

処理するカラムを定義する。
var wNewColumn:NSTableColumn = NSTableColumn(identifier: “Column #1”) 

追加する列のタイトルを設定する。
wNewColumn.title =  “表のタイトル”  

列の幅を設定する。
wNewColumn
.width       = CGFloat(30)  

列がなければ、追加する。
if xqTVMethod!.numberOfColumns <= 0 {
xqTVMethod!.addTableColumn(wNewColumn

}

問題:サンプルプログラムでは、xqTVMethod!.removeTableColumn(wNewColumn) のような書き方でカラムを削除できます。ところが、開発中のアプリでは、そうできない問題が発生しています。もしかするとidentifierがまちがっているかもしれないとチェックしてみたのですが、カラム追加のとき、identifierをカラム見出しに表示してOKを確認しても削除ができません。はてな?

カラムの削除の仕方:
次のようにしたらカラムを削除できました。やれやれ。

var wColumnNo:Int = 0  //カラム位置
var wAllColumns = xqTVMethod!.tableColumns as! [NSTableColumn]
for wColumn: NSTableColumn in wAllColumns {
 if wColumnNo > 0  { //カラム位置0以外のとき、
  xqTVMethod!.removeTableColumn(wColumn) //カラムを削除する。
 } else { }
 wColumnNo++ 
 } 

サンプルコードはここにあります。

Advertisements