1

在我的应用程序中,我有一个NSOutlineViewNSTreeController- 获取数据的应用程序,而后者又从核心数据模型中获取数据。

我现在想做的是向大纲视图添加组标题和一些额外的行——显然这些东西应该存在于模型之外并成为视图的一部分。但是,尽管我为此挠头,但我想不出任何方法可以在不修改底层模型的情况下让大纲视图显示这些东西,这显然是一个很大的禁忌。

非常感谢您的帮助。我觉得我在这里遗漏了一些明显的东西......

4

1 回答 1

4

您在这里要做的是编写一个自定义NSTreeController子类。这就是为什么这是您想要进行更改的理想场所:

  • 正如你所说,它不在模型中。
  • 与视图无关——完全透明。
  • 基本上你想要的是从保存的数据中创建显示的数据<-这是控制器的任务。

幸运的是,Cocoa 中的 Controller 类非常强大,同时也非常简单。-arrangedObjects对您来说,覆盖该方法就足够了。重用默认实现,因为它做了很多有用的事情,比如应用谓词或排序。这可能是这样的:

- (id)arrangedObjects {
  id root = [super arrangedObjects];

  // "root" is something like a NSTreeNode but not quite yet
  NSTreeNode *newRoot = [NSTreeNode treeNodeWithRepresentedObject: nil];
  [[newRoot mutableChildNodes] setArray: [root childNodes]];

  // Do your customizations here

  return newRoot;
}

返回的对象属于该类NSTreeNode- 请参阅有关如何进行修改的文档。

于 2010-11-14T18:01:39.153 回答