1

我有一个小的可可应用程序,UI 主要由一个 NSTableView 组成。但是,我有 2 个不同的数据列表要在其中显示,然后在两者之间切换。我的问题是,您认为实现这一点的最佳方法是什么?

现在我想我可以使用 BOOL 标志来更改在 dataSource 方法中使用的 Array。但我还需要更改使用的 NSCell 类,因为列表包含完全不同的数据对象。然后我需要重新加载表([table reloadData] 会可靠地重新加载所有这些吗?)。

或者,我可以在我的 NIB 文件中创建 2 个单独的 NSTableViews 并切换它们的可见性......但这似乎很骇人听闻。

我对 Cocoa 有很好的理解,但我不太确定如何搜索这样的东西,我很好奇其他更有经验的开发人员将如何解决这个问题。

谢谢。

4

3 回答 3

1

或者,我可以在我的 NIB 文件中创建 2 个单独的 NSTableViews 并切换它们的可见性......但这似乎很骇人听闻。

这根本不是hackish。对多组不同的数据使用同一个表视图是不合时宜的。

只需创建一个NSTabView带有两个选项卡的表格,将一个NSTableView放在第一个选项卡中,另一个NSTableView放在第二个选项卡中。然后,您可以通过调用-selectTabViewItemAtIndex:.NSTabView

于 2009-11-12T09:23:16.820 回答
0

为什么不单独实现UITableViewDataSourceand UITableViewDelegate,并更改UITableView切换事件发生时的指向?似乎它比在一个实现中包含所有条件代码要干净得多。仅仅因为大多数示例显示了UITableViewController实现这两个协议并不意味着它们不能是三个独立的对象。

于 2009-11-12T05:38:32.690 回答
-1

Sixten Otto 的答案是正确的。也就是说,如果我只是想拼凑一些有效的东西,我可能会做这样的事情:

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

然后实现两个版本的 cellForRowAtIndexPath。我很确定 reload data 方法会重新加载屏幕上的所有内容。

骇人听闻,但可行。

于 2009-11-12T05:48:43.607 回答