objective-c - NSOutlineView——组合多个源

标签 objective-c cocoa macos nsoutlineview nstreecontroller

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

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

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

最佳答案

您在这里要做的是编写一个自定义的NSTreeController子类。这就是为什么这是您想要进行的更改的最佳位置的原因:

  • 正如您所说,它不在模型中。
  • 与 View 无关——完全透明。
  • 基本上,您想要的是根据保存的数据创建显示数据<-这是 Controller 的任务。

幸运的是,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类- 请参阅有关如何进行修改的文档。

关于objective-c - NSOutlineView——组合多个源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4157736/

相关文章:

macos - 如何通过Applescript显示默认的Safari下载文件夹?

objective-c - Cocoa 目录内容

iphone - 当用户取消 SSO 过程时,我如何通知 iPhone 应用程序?

iphone - 在 Facebook 上显示应用名称 分享 iPhone

cocoa 足类。规范未通过验证 : 'Cocoa/Cocoa.h' file not found but I have declared the Cocoa library

bash - 无法访问bash中括号内的变量

ios - 应用内购买验证 - 根据用户验证购买

objective-c - 使用代码对 Objective-C NSTableView 中的单元格中的文本进行加粗和取消加粗

objective-c - NSTextfield + NSMenu 和第一响应者

ruby-on-rails - class.save 错误 ruby​​ on rails