3

サブクラス化された NSCell (チェック ボックス セル) に関して問題があります。チェックマークの横にタイトルとサブタイトルを表示したい (そのため、これらの NSString プロパティを作成しました)。それらの値はバインディングを介して設定されます(IBからは素晴らしいでしょう)が、ここで問題が発生します:

IB では、セルの「値」のみを設定できます。私の場合は、チェックマーク状態の BOOL です。

データを提供している NSArrayController にバインドする必要があるクラスはどれですか? 細胞自体は何にも縛られず、次のようなことをしているようです

[self.subtitle bind:...]

どちらも機能しません。バインディングはいつ、どこで行う必要がありますか?

ベスト、ステファン

4

1 に答える 1

0

NSButtonCell はバインドを公開するため、セルベースの NSTableView でこれを行っていると仮定しますが、NSTableColumn をバインドする必要があり値のみを公開するtitleため、NSTableView のコンテキストでは役に立ちません。NSButtonCells を含む NSTableColumns のバインディング。これはフレームワークの欠点であり、多くの人が取り組んできたことを Google が明らかにしています。

-tableView:dataCellForTableColumn:row:これに対する 1 つのアプローチは、自分のメソッドと-tableView:willDisplayCell:forTableColumn:row:デリゲート メソッドでモデルからタイトルを更新することです。これには、基になるモデルが変更されたときに KVO 経由で更新されないという欠点があります。それがアプリケーションにとって重要な場合、1 つの回避策はvalue、チェックボックスのモデル keyPath に依存するチェックボックスのモデル keyPath を作成することtitleです。このようにして、タイトルが変更されると、KVO は値の変更に関する通知を送信します。これにより、行が再描画され、タイトルがデリゲート メソッドによって更新されます。

この質問は古いことに気づきましたが、最近のより簡単なアプローチは、NSView ベースの NSTableViews を使用することです。このようにすると、Value バインディングと Title バインディングの両方 (およびその他のバインディング) を使用できるファーストクラスの NSButton コントロールを使用できます。Lion より前のバージョンの OS をサポートすることを心配していなければ、多くの場合、より実行可能なアプローチです。

于 2012-12-05T03:33:56.843 に答える