8

Cocoa - View-Based NSTableView, using one cell in multiple tablesに同様の質問があり、Apple 独自のドキュメントで増幅され ていますmakeViewWithIdentifier:owner:

「通常、識別子はInterface Builderの外部NIBに関連付けられており、テーブルビューは提供された所有者でNIBを自動的にインスタンス化します。」

NSTableCellViewこれは、 を含むペン先とは別のペン先にを保管できる必要があることを意味しているようですNSTableView。ただし、私の実験では、これを呼び出しているテーブルビューに含まれるセルしか取得できませんでした。つまり、セルを切り取り、新しい .xib ファイルに貼り付けると、テーブルビューはそれを見つけることができなくなります。私は何を間違っていますか、それともこれは実際には不可能であり、アップルのドキュメントを誤解していますか?

4

2 に答える 2

5

- (void)registerNib:(NSNib *)nib forIdentifier:(NSString *)identifierセル識別子で使用する nib を登録するために使用します。

うまくいかない場合は、tableView データがロードされた後に nib を登録している可能性があります。[tableView reloadData]あとがきを使用して、タイミングの問題ではないことを確認してください。

于 2012-10-28T23:59:17.847 に答える
3

この問題に遭遇したばかりで、専用の Nib を使用してビューベースのテーブルにデータを入力している場合、makeViewWithIdentifier:owner:を使用できないと思います。

この問題は、ファイルの所有者 (つまり、ビュー コントローラー) に関係しています。makeViewWithIdentifier:owner:単純なカスタム ビューの所有者として「self」を使用することを意図しているようです。

通常、アウトレットを備えたカスタムビュー用に別のペン先がある場合は、別のビューコントローラーも必要になります。それ以外の場合、カスタム ビューにアウトレットがあり、テーブルに多くのカスタム ビューが表示されている場合、「セルフ」テーブル ビューの所有者からどのアウトレットを参照していますか?

したがって、私のテストでは、テーブル ビューのデリゲート/データソースとして AppDelegate を取得しました。インターフェイスへのアウトレットを備えたCellView.xibCellViewController.h/.mがあります。次に、私のtableView:viewForTableColumn:row: delegate メソッドに次のコードがあります。

SSCellViewController *vc = [[SSCellViewController alloc] initWithNibName:@"CellView" bundle:nil];
return vc.view;

失われるのは、makeViewWithIdentifier:owner: で自動的に行われるセルの再利用です。これを自分で実装するには、作成した多くのビュー コントローラーを管理する必要もあります。

私は何年も iOS の仕事だけをしていたので、OS X の開発に来ているので、まだ何かが足りないかもしれません。

于 2012-09-26T18:59:04.573 に答える