私はすでにこの件について1日を殺しましたが、これはどうして正しい方法でこれを行うことができるのかまだ分かりません。単一のNSCellを複数の値にバインドする
NSOutlineView
を使用してファイルシステムの階層を表示しています。最初の列の各行について、チェックボックス、関連するアイコン、ファイルまたはディレクトリの名前を表示する必要があります。これを行うための標準的な方法はないので、NSTextFieldCell
をSourceViewとPhotoSearchの両方の例を使用してサブクラス化しました。value
をIBにname
のツリーアイテムクラスのプロパティーにバインドしますが、NSTreeController
です。私はdrawWithFrame:inView:
を使用して、チェックボックスと画像をペイントし、テキストの描画をsuper
に転送しています。私はまた、trackMouse:inRect:ofView:untilMouseUp:
のオーバーライドを使ってチェックボックスのやりとりを処理しています。
カスタムセル内でマウスボタンを押した後にセルオブジェクトがcopyWithZone:
でコピーされていて、この一時オブジェクトがtrackMouse:inRect:ofView:untilMouseUp:
というメッセージで送信されていて、チェック状態を変更できないことに気づくまでは、ビューに存在する元のセル。
質問の対象はバインディングなので、これは答えかもしれないと思っていましたが、この混乱をどのようにして期待どおりに機能させるべきかは全く分かりません。試してみました:
[[[treeView outlineTableColumn] dataCell] bind:@"state"
toObject:treeController
withKeyPath:@"selection.state"
options:nil];
すべてではありませんでした。私はそれを取得していないように見えます。
これは完全に間違った方法ですか?さらなる読書のために、より良い選択肢やリンクを提案できますか?
UPD 1/21/11:私もこの試みた:
[[[treeView outlineTableColumn] dataCell] bind:@"state"
toObject:treeController
withKeyPath:@"arrangedObjects.state"
options:nil];
のが、「のようなエラーが取得保管[< _NSControllerTreeProxyの0x ...> valueForUndefinedKeyを:]:このクラス鍵の状態のコード化に準拠した鍵価値ではない」類似しています。
ええ、それは私が[値]-'name'が最初の場所で結合 'の話を意味したものです:私はすでに、[値]'に 'arrangedObjects.name'バインドを持っていますそのため、同時に 'arrangedObjects.state'にバインドすることはできません(また、' state'バインディングも使用できません)。どのように可能ですか?.. –
*ああ!*申し訳ありません!チェックボックスのボタンセルでは可能ではないと私は信じています。バインディングを使用する場合は、チェックボックスのボタンセル自体(タイトルなし)に別の列を使用する必要があります。 –