问题标签 [nsoutlineview]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1483 浏览

cocoa - NSOutlineView 拖放

我在这里阅读了关于 Outlineviews 和 DND 的另一篇文章,但我无法让我的程序运行。这篇文章的底部是我的项目的 zip 链接。它非常基本,只有一个大纲视图和按钮。我希望它接收放置在上面的文本文件,但我的代码或连接有问题。我尝试遵循 Apple 的 NSOutline 拖放示例代码,但我遗漏了一些东西。1 个不同之处是我的程序是基于文档的程序,而他们的示例不是。我将文件的所有者设置为接收委托操作,因为这是我处理拖放的代码以及按钮操作的位置。它可能是一个简单的错误,所以有人可以看看它并告诉我我做错了什么吗?

0 投票
2 回答
2785 浏览

iphone - UITableView 的大纲视图

我需要从 UITableView 中实现 1 级大纲视图。有孩子的单元格将有一个“+”符号,如果用户点击它,它下面的单元格应该向下滑动并且应该出现当前选定行的子单元格。单元格的滑动应该是可见的,如果用户点击已经展开的行的“-”按钮,子单元格应该滑回父单元格。

我试过谷歌搜索,但没有找到任何指针。

我应该如何开始,我应该继承 UITableView 吗?或者我应该实现自己的视图子类并处理那里的所有东西?

我不知何故觉得子类 UITableView 会更容易,因为它会为我们处理所有的行选择,但我不知道该怎么做。

谢谢和问候, 拉吉

0 投票
1 回答
1134 浏览

cocoa - 让 NSFormatter 不断验证 NSTextFieldCell

在 Cocoa 中,我有一个 NSOutlineView,其中的单元格是 NSTextFieldCell。单元格显示的值是根据特定规则格式化的字符串(例如浮点数或浮点数对,中间有空格)。我制作了一个自定义 NSFormatter 来验证文本,这似乎没有问题。

但是,单元格(或大纲视图,我不确定是什么原因造成的)似乎仅在我的编辑结束时才使用格式化程序。如果我在文本字段中输入一些字母字符(这违反了格式化规则),这些字符就会出现——我注意到格式化程序正在发挥作用的唯一方法是,我现在无法将键盘焦点从该单元格移开。如果我将单元格的内容返回为有效形式,那么我可以将焦点移开。

我已将单元格视图和大纲视图都设置为“连续”。

如果我一开始就无法在单元格中输入文本会更好。是否有可能做到这一点,如果可以,怎么做?

0 投票
1 回答
2501 浏览

cocoa - Cocoa NSOutlineView 和拖放

我最近开始了另一个没有帐户的线程,所以我在这里用一个帐户重新发布了这个问题,这样我就可以编辑该程序的当前链接,以便其他用户可以关注这个。我还更新了下面的代码。这是我原来的问题:

我在这里阅读了关于 Outlineviews 和 DND 的另一篇文章,但我无法让我的程序运行。这篇文章的底部是我的项目的 zip 链接。它非常基本,只有一个大纲视图和按钮。我希望它接收放置在上面的文本文件,但我的代码或连接有问题。我尝试遵循 Apple 的 NSOutline 拖放示例代码,但我遗漏了一些东西。1 个不同之处是我的程序是基于文档的程序,而他们的示例不是。我将文件的所有者设置为接收委托操作,因为这是我处理拖放的代码以及按钮操作的位置。它可能是一个简单的错误,所以有人可以看看它并告诉我我做错了什么吗?这是该文件的链接:http: //dl.dropbox.com/u/7195844/OutlineDragDrop1.zip

0 投票
1 回答
2661 浏览

cocoa - nsoutlineview 的 Nstableview 组样式

我喜欢 nstableview 中组行的外观。在苹果邮件中,类似邮箱和 RSS 的群组部分也具有这种风格。

有没有一种简单的方法可以使 nsoutlineview 中的组行或根项看起来像这样?我想我必须重写 willDisplayCell 方法......

0 投票
1 回答
988 浏览

cocoa - 当对象从 NSOperations 添加到托管对象上下文时,NSOutlineView 不刷新

背景

  • 使用核心数据的 Cocoa 应用程序 两个进程 - 守护进程和主 UI
  • 守护进程不断写入数据存储
  • UI 进程从同一数据存储中读取
  • UI 中 NSOutlineView 中的列绑定到 NSTreeController
  • NSTreeControllers managedObjectContext 绑定到 Application 的 key path 为 delegate.interpretedMOC
  • NSTreeControllers 实体设置为 TrainingGroup(NSManagedObject 子类称为 JGTrainingGroup)

我想要的是

当 UI 被激活时,大纲视图应该使用守护程序插入的最新数据进行更新。

问题

主线程方法

我获取所有我感兴趣的实体,然后迭代它们,执行 refreshObject:mergeChanges:YES。这工作正常 - 项目正确刷新。但是,这一切都在主线程上运行,因此 UI 在刷新时会锁定 10-20 秒。好的,所以让我们将这些刷新转移到在后台运行的 NSOperations。

NSOperation 多线程方法

一旦我将 refreshObject:mergeChanges: 调用移动到 NSOperation 中,刷新就不再起作用。当我添加日志消息时,很明显新对象是由 NSOperation 子类加载并刷新的。似乎无论我做什么, NSOutlineView 都不会刷新。

我试过的

我已经搞砸了 2 天,并尝试了我能想到的一切。

  • 将 objectIDs 传递给 NSOperation 以刷新而不是实体名称。
  • 在不同点重置解释的MOC - 在数据刷新之后和大纲视图重新加载之前。
  • 我将 NSOutlineView 子类化。我丢弃了我的子类并将视图重新设置为 NSOutlineView 的一个实例,以防万一这里发生任何有趣的事情。
  • 在重新加载 NSOutlineView 数据之前添加了对 NSTreeController 的重新排列对象调用。
  • 确保我已在我使用的所有托管对象上下文中将过时间隔设置为 0。

我有一种感觉,这个问题在某种程度上与在内存中缓存核心数据对象有关。但是我已经完全用尽了所有关于如何让它发挥作用的想法。

我将永远感激任何能够阐明为什么这可能行不通的人。

代码

主线程方法

NSOperation 多线程方法

更新 1

我刚刚发现了这个问题。在发布我的之前,我无法理解我是如何错过它的,但总结是:Core Data 并不是为了做我正在做的事情而设计的。只有一个进程应该使用数据存储。

NSManagedObjectContext 和 NSArrayController 重置/刷新问题

但是,在我的应用程序的不同区域中,我有两个进程共享一个数据存储,其中一个具有只读访问权限,这似乎工作正常。另外,我关于这个主题的最后一个问题的答案都没有提到 Core Data 不支持这一点。

I'm going to re-architect my app so that only one process writes to the data store at any one time. I'm still skeptical that this will solve my problem though. It looks to me more like an NSOutlineView refreshing problem - the objects are created in the context, it's just the outline view doesn't pick them up.

0 投票
2 回答
448 浏览

objective-c - NSTreeController 显示重复实体的建议解决方案

许多人可能知道,绑定到大纲视图的 NSTreeController 可以在呈现核心数据实体时显示重复项。

一个临时解决方案是在谓词中添加 'parent == nil',但这只会返回父实体。例如,如果用户正在搜索子实体,则不会显示请求的子实体。

一个(提议的)解决方案是继承 NSTreeController 并添加一个 NSMutableSet 变量,它跟踪当前正在显示的实体。这个变量应该在 init 上分配,并在 dealloc 上释放。

当调用“fetchWithRequest:merge:error:”时,该集合应该被清空(我不确定这是否比释放它并再次分配它更有效)。每次要添加实体以显示时,请检查集合是否包含它。如果没有,请添加它。否则,找到更接近根(即子实体)的位置,如果是子实体则跳过它,或者将其与先前包含的交换。

我认为对性能的影响应该相对较小(考虑到 NSSet 使用散列)。我遇到的问题是找到正确的方法来覆盖以添加此行为。具体来说,NSTreeController 在调用“fetchWithRequest:merge:error:”之后处理获取的实体。

0 投票
1 回答
3360 浏览

cocoa - 用每行不同的单元格(和数据类型)实现 NSOutlineView/NSTableView

我想知道如何实现一个大纲视图,就像 Xcode 3 用于构建配置的那样:

替代文字

当使用带有绑定的 NSOutlineView/NSTableView 和 NSTreeController/NSArrayController 时,由于显而易见的原因,视图的列将绑定分配给,而不是单个单元格。如果一列中的每一行都使用相同的单元格,那么它就是小菜一碟。但是,如果每一行(可能)使用自己的单元格类型(并且可能使用它自己的绑定集合),那么事情就会变得很奇怪。

查看屏幕截图可以清楚地看到文本字段单元格只需要一个“值”绑定。而弹出按钮单元格至少需要一个用于“ content ”,一个用于“ contentValues ”,最后但并非至少一个绑定用于“ selectedIndex / selectedObject / selectedValue ”。复选框单元格需要一个“”绑定和(可能)一个“标题”绑定。

如何使用尽可能干净(和少)的代码来实现这一点?
或者有人可能会问: Apple 是如何做到的?)

到目前为止,这是我自己尝试过的:我通过[outlineView:dataCellForTableColumn:item:]
提供适当的(复制的)单元格,并将它们绑定到各个数据模型(来自 [item代表对象])。我知道大纲视图中显示的确切数据量(< 500 行),所以每行有一个单元格不应该是太多的内存问题,不是吗?我通过绑定(耶!)获得了正确显示的数据,但是我无法更改它们的任何值。O_o 显然,值的变化永远不会通过数据模型。除了简单的[checkboxCell bind:@"value" toObject:rowModel withKeyPath:@"value" options:nil]之外,还有更多的功能吗?(因为这似乎足以值,但不适用于相应地设置它们。)

我找不到有关此主题的任何信息。每列使用自定义单元格的大量信息和提示,但没有以“每行”为基础使用它们。:(
这将为 Cocoa 教程提供一些很棒的东西,不是吗?;)

0 投票
1 回答
631 浏览

objective-c - NSOutlineView:拖动项目时避免黄色边框很热?

当我将行从 NSTableView 拖到另一个 NSOutlineView 时,NSOutlineView 会出现黄色高亮边框。我该如何避免呢?

准确地说,只有当我将表中的行拖到 NSTableView 的可用空间(即不在任何项目上)时,才会发生这种情况。但是,当我直接在 NSOutlineView 中的项目上拖动行时,黄色边框不会显示,但(当然)项目会自行选择。

NSOutlineViews 的数据源中的重要部分outlineView:validateDrop:proposedItem:proposedChildIndex:如下所示:

谢谢你的帮助!

0 投票
1 回答
414 浏览

objective-c - 以编程方式将核心数据实体中的项目放入 NSOutlineView?

抱歉,如果这看起来是一个愚蠢的问题 - 我是 Objective-C 和 Cocoa 的业余爱好者,而对于 Core Data 的使用则更不了解。

所以情况是这样的:我有一个 NSOutlineView,我已经使用 NSTreeController 手动填充了一些项目。我现在需要做的是获取我的核心数据实体之一中的项目并将它们附加到 NSOutlineView 的当前内容中。

显然,这超出了绑定的能力,因此需要以编程方式完成。我该怎么办?我假设我需要进行一次提取,然后遍历返回的项目,将每个项目添加到大纲视图中。它是否正确?如果是这样,任何人都可以展示如何做到这一点的例子吗?

谢谢!