1

私が物事を正しく行っているかどうかはわかりませんが、これが私の問題です:

アレイコントローラーへのバインディングを使用するビューベースのNSTableViewがあります。

表現されたオブジェクトに応じて、各行でカスタム描画を行う必要があります。また、特定の領域でクリックをキャプチャする必要があるため、各行にコントローラーを用意し、カスタムセルビューのサブビューにアウトレットを設定する必要があります。しかし、どうすればこれを達成できるのかわかりません。

ペン先にオブジェクトを追加して接続するだけでは、どのビューが描画されているか(またはクリックされているか)がわかりません。

4

2 に答える 2

1

デリゲートメソッドを実装する必要があります:

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row

これは、特定のセル(列、行)のビューを取得するためにテーブルビューによって使用されます。次に、「makeViewWithIdentifier:owner:」を使用して、指定された識別子と指定された所有者(ビューコントローラー)を持つ再利用可能なセルを取得できます。最も簡単な方法は、Interface Builderでセルを設計し、セルごとに異なる識別子を設定することです。次に、メソッド「makeViewWithIdentifier:owner」は、指定された識別子のビューを自動的に作成します。

于 2012-09-04T21:31:39.080 に答える
-1

誰かが同様の質問をしているのを見つけました。それに対する答えも私のニーズを満たしているので、ここで終わる人にとっては、これが私がしたことです。

  • NSTableCellViewコントローラをのデリゲートとして設定しましたNSTableView

  • 私のNSTableCellViewサブクラスでは、必要なメソッド(drawRect:mouseUp:など)を実装し、コントローラーでそれぞれのメソッドを呼び出します。

  • コントローラにアクセスするには、次のNSTableViewようなデリゲートを取得します。

    NSTableView *tableView = (NSTableView*)myView.superview.superview.superview;
    MyControllerClass *controller = (MyControllerClass*)tableView.delegate;
    [controller view:myView drawRect:dirtyRect]
    
  • コントローラでは、どのビューがイベントを送信しているかを確認するために、それらの識別子を使用します。

于 2012-09-05T14:11:39.727 に答える