Swift

Swift:NSTableViewのカラムを編集する

クリックされた行位置とカラム位置から編集対象のカラムを特定して・・・と考えてみたのですが、簡単な方法がありました。

ふたつつまずきました。

  • NSTableViewのメソッドをoverrideするとコンパイルエラーが出て、overrideを取るとここに飛んで来ません。
    ➡️原因はstoryboardの表が処理するクラスと接続されていないためでした。

dataSource—TableViewEXIF
delegate——TableViewEXIF

  • カラムのデータは次のメソッドをoverrideして、その中で書き換え処理をすれば簡単にできます。overrideでコンパイルエラーが出たとき、これをとってもOKです。

func tableView(aTableView: NSTableView, setObjectValue anObject: AnyObject?, 
forTableColumn aTableColumn: NSTableColumn?, row rowIndex: Int) {
//必要な処理を追加する
var wBool1:Bool = rcCom.ExecSearchWords(“\(aTableColumn)”,pSearch:”identifier”)
var wBool2:Bool = rcCom.ExecSearchWords(“\(aTableColumn)”,pSearch:”fexif”)
if wBool1 == false || wBool2 == false { return } 
else { }

 var wCell   = ExecGetCellinfo(rowIndex)
cm.wkArrayExif[rowIndex] = [“fid”:pID, “fname”:wCell.pName, “fexif”:anObject as! String]
}

注1. ExecSearchWordsは”\(aTableColumn)”にpSearchがあるか検索するメソッド。
注2. ExecGetCellinfoは行位置rowIndexの内容を取り出すメソッド。
注3. ここでは所定のidentifierのとき、ユーザーが書き換えた内容でカラムを更新しています。

今までNSTableViewの実装は配列を反映させるものと考えていたので、この方法は目から鱗でした。また、Cell BasedとView Basedがあるというのもはじめて知りました。実装はAPI Referenceを参照しましたが、次のブログがヒントになりました。
参考:Table Viewで表を表示する
参考:SwiftでOS Xアプリケーションのプログラミング – 表

Categories: Swift, 技術