【问题标题】:NSTableView - toggling between 2 datasourcesNSTableView - 在 2 个数据源之间切换
【发布时间】:2009-11-12 05:29:25
【问题描述】:

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

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

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

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

谢谢。

【问题讨论】:

    标签: objective-c cocoa nstableview


    【解决方案1】:

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

    它一点也不骇人听闻。对多组不同的数据使用同一个表视图是不合时宜的。

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

    【讨论】:

    • 这实际上是我希望的解决方案。我仍在学习 Cocoa 框架中可供我使用的 UI 控件,而表格“TabView”(或在其他框架中称为 ViewStack)正是我想要使用的。感谢您向我指出这一点。
    【解决方案2】:

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

    【讨论】:

    • UITableView 不是 NSTableView。
    • 哦,天哪。你完全正确,彼得。就我而言,阅读理解失败的方式。对不起,尼克!
    • 另一方面,同样的原则是否不适用于 AppKit 类?看起来它们具有与 UIKit 类相同的视图、数据源和委托的基本结构?机器的零件是否结合得更紧密?
    • 在 UIKit 中,数据源提供单元格(即视图),而表格视图没有列。在 AppKit 中,每一列都有一个单元格(这不是一个视图),并且表格视图为每一行的该列使用一个单元格。数据源仅提供数据,表格视图将这些数据提供给每列的单元格,因此切换数据源不会更改列集或其单元格。
    【解决方案3】:

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

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

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

    Hackish,但可行。

    【讨论】:

    • 不,Sixten Otto 的 UITableView 答案不是 NSTableView 问题的正确答案。
    • 哦,对了...并非所有可可问题都是 iPhone 问题。哎呀!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    • 2019-02-25
    • 2018-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多