【发布时间】:2015-06-26 15:27:16
【问题描述】:
我有一个 NSOutlineView 显示目录层次结构。它绑定到NSTreeController,它绑定到我的管理文件系统节点的类。当文件系统事件发生时,我会在children 键路径上触发 KVO 通知,这会导致大纲视图更新。但是当它更新时,它突然向上滚动到最顶部。我希望滚动位置保持不变。有什么想法吗?
这是发生 FS 事件时运行的代码:
- (void)URLWatcher:(CDEvents *)URLWatcher eventOccurred:(CDEvent *)event {
[self willChangeValueForKey:@"children"];
children = nil; // this will refreshed next time children is called
[self didChangeValueForKey:@"children"];
}
这是在模型中,所以我无法访问视图。
【问题讨论】:
-
您是重新加载整个大纲视图还是只重新加载需要更新的特定项目?
-
@rocky 我没有明确地重新加载大纲视图。树控制器为我重新加载它。
-
什么对象得到这个消息?相关的 FS 节点表示或控制器?我有点不清楚你为什么在这里解雇 KVO。还有你如何让孩子们振作起来。你能证明这一点。我构建了一个快速树控制器/nsoutlineview,只要我不触发 KVO,我就不会在更新时重置视图。
-
@WarrenBurton 1. 我发布的代码在目录节点中。 2. 我正在触发 KVO 来告诉树控制器(它正在观察每个节点)孩子们已经更新了。如果你真的需要看我的代码,它在 github 上github.com/vindo-app/vindo/blob/fsevents/Vindo/DirectoryItem.m
标签: cocoa nsoutlineview nstreecontroller