NSTableView - 在2个数据源之间切换

时间:2009-11-12 05:29:26

标签: objective-c cocoa nstableview

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

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

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

我对Cocoa非常了解,但我不确定如何搜索这样的东西,我很好奇其他更有经验的开发者会如何解决这个问题。

感谢。

3 个答案:

答案 0 :(得分:1)

  

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

这根本不是hackish。对多组不同的数据使用相同的表视图是很困难的。

只需创建一个包含两个标签的tabless NSTabView,在第一个标签中添加一个NSTableView,在第二个标签中添加另一个NSTableView。然后,您可以通过调用-selectTabViewItemAtIndex:上的NSTabView来切换表格视图。

答案 1 :(得分:0)

为什么不单独实施UITableViewDataSourceUITableViewDelegate,并更改切换事件发生时UITableView指向哪些?看起来它比在一个实现中拥有所有条件代码要清晰得多。仅仅因为大多数示例显示UITableViewController实现这两个协议并不意味着它们不能是三个独立的对象。

答案 2 :(得分:-1)

Sixten Otto的回答是正确的。也就是说,如果我只想破解一些有效的东西,我可能会这样做:

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

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

哈金,但可行。