コードオンリー Cocoa Bindings で NSTableColumn に bind する方法
2020年の終わりに書く記事がこれか?
私は macOS でも iOS でも基本的にコードオンリーでUIを書いているのだけれど、今までコードオンリーの Cocoa Bindings で NSTableView
にデータを表示する時に *1 カラム毎に objectValue の keyPath を指定する方法を見つけられていなかった。
ので、こういう変なコードを書いて誤魔化していた。
let field = NSTextField(string: "") let wrapper = WrapperView(wrapped: field) field.bind(.value, to: wrapper, withKeyPath: "objectValue.title", options: nil)
が、実は NSTableColumn
に下記のようなやり方で Binding を指定すればいいことを発見した。
let column: NSTableColumn = .init(...) column.bind(.value, to: arrayController, withKeyPath: "arrangedObjects.title", options: nil)
要はbind先を NSArrayController
にして keyPath の objectValue
を arrangedObjects
にすればよい。なるほどね。
コードオンリーでUI書いている人は macOS アプリ開発者だとあんまりいなくて (そもそも iOS アプリ開発者でもあんまりいないけど macOS アプリ開発者は全体のパイが小さいのでもっと少ない)、さらに Cocoa Bindings を Swift で使ってる人、というと私以外にいるのか怪しいレベルだけど、もし参考になる人がいたら *2。
それでは、よいお年を!