1

小さなココア アプリがあり、UI は主に単一の NSTableView で構成されています。ただし、表示したいデータの2つの異なるリストがあり、2つを切り替えるだけです。私の質問は、これを実装する最良の方法は何だと思いますか?

これで、BOOL フラグを使用して、dataSource メソッドで使用される配列を変更できることがわかりました。しかし、リストにはまったく異なるデータ オブジェクトが含まれているため、使用する NSCell クラスも変更する必要があります。次に、テーブルをリロードする必要があります ([table reloadData] はこれをすべて確実にリロードしますか?)。

または、NIB ファイルに 2 つの別個の NSTableView を作成し、それらの可視性を切り替えることもできます...しかし、これはハックのようです。

私は Cocoa についてかなりよく理解していますが、このようなものを検索する方法がよくわかりません。経験豊富な他の開発者がこの問題をどのように解決するのか興味があります。

ありがとう。

4

3 に答える 3

1

または、NIB ファイルに 2 つの別個の NSTableView を作成し、それらの可視性を切り替えることもできます...しかし、これはハックのようです。

まったくハックではありません。複数の異なるデータ セットに同じテーブル ビューを使用するのはハックです。

2 つのタブを持つテーブルを作成し、NSTabView1 つNSTableViewを最初のタブに、もう1 つを 2 つNSTableView目のタブに配置します。-selectTabViewItemAtIndex:を呼び出して、テーブル ビューを切り替えることができますNSTabView

于 2009-11-12T09:23:16.820 に答える
0

と を別々に実装し、トグル イベントが発生したときにどちらを指すかを変更しないのはUITableViewDataSourceなぜですかUITableViewDelegate? UITableView1 つの実装ですべての条件付きコードを使用するよりも、はるかにクリーンになるようです。ほとんどの例UITableViewControllerがこれらのプロトコルの両方を実装していることを示しているからといって、それらが 3 つの別個のオブジェクトであってはならないというわけではありません。

于 2009-11-12T05:38:32.690 に答える
-1

Sixten Otto の答えが正解です。とはいえ、機能するものをハックしたいだけなら、次のようにするかもしれません。

- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  if (dataSourceOne) {
    [self cellForRowAtIndexPathDS1:indexPath];
  }
  else {
    [self cellForRowAtIndexPathDS2:indexPath];
  }
}

次に、2 つのバージョンの cellForRowAtIndexPath を実装します。reload data メソッドが画面上のすべてをリロードすると確信しています。

ハックですが、実行可能です。

于 2009-11-12T05:48:43.607 に答える