1

チェックボックス付きの小さなものNSTableViewがあります。チェックボックスがチェックされていないときはいつでも、隣接するNSCells の 1 つをグレー表示してアクセスできないようにします。

ただし、特定の 1 つのセルのみをアドレス指定する方法がわかりません。-dataCellForRowofNSTableColumnは、テーブル列全体のテンプレート セルを常に変更します。

1 つのセルにアクセスするにはどうすればよいですか?

編集:NSTableViewDataSourceプロトコルを使用してテーブルビューを埋めます。

4

3 に答える 3

8

「セルにアクセス」しません。NSTableView必要な場合にのみデータを要求します。データを入力したり、直接制御したりしません。

代わりに、NSTableViewDatasourceおよび オプションのNSTableViewDelegateプロトコルを実装するコントローラー オブジェクトを作成します。その後、テーブル ビューはデータソース メッセージをコントローラーに送信し、コントローラーは適切なデータを提供します。

‑tableView:setObjectValue:forTableColumn:row:datasource メソッドを実装することで、テーブル ビューに表示されるオブジェクトの編集を許可できます。このメソッドは、ユーザーがチェックボックスをクリックすると、コントローラー オブジェクトで呼び出されます。モデルを適切に更新するのはコントローラーの責任です。

モデルが更新されると、コントローラーはテーブル ビューにリロードするように指示する必要があります。‑tableView:objectValueForTableColumn:row:テーブル ビューは、 datasource メソッドを使用して、表示が必要なセルの値をコントローラに要求します。これには、無効にする必要があるセルが含まれます。コントローラーは、セルに適切な値を提供する必要があります。

セルをさらに制御する必要がある場合は、 ‑tableView:willDisplayCell:forTableColumn:row:デリゲート メソッドを実装できます。これはセルが表示される直前に呼び出され、セルを適切に変更できます。

データ ソースの使用に関する詳細情報は、ドキュメントにあります。

もう 1 つのオプション (データソースを使用する代わりに) はNSArrayController、モデル オブジェクトのコレクションにバインドする Cocoa バインディングと を使用することです。その場合、Enabledテーブル列のバインドを、セルの有効状態を制御するモデル オブジェクトのプロパティにバインドできます。そのプロパティの状態が正しいことを確認するのはあなたの責任です。

プロパティを別のプロパティの値に依存させる必要がある場合は、Key-Value Observingドキュメントで概説されている依存キー メカニズムを使用できます。

于 2010-05-05T06:37:10.250 に答える
1

その列の編集可能性をチェックボックスに表示されている値にバインドできますか? つまり、チェックされている場合は編集可能ですが、そうでない場合は編集できませんか?

正確なエディター インターフェイスを思い出そうとしていますが、自宅で Mac の隣にいないため、完全に説明することはできません。これが正しい方向を示してくれることを願っています。

于 2010-05-04T20:07:35.323 に答える