如何阻止NSTableView保存当前滚动位置?

时间:2014-02-04 05:20:45

标签: macos cocoa nstableview

在我的应用中,NSTableView NSViewController NSArrayControllersetAutosaveTableColumns提供内容。

但是,当我滚动到tableview的某个位置,退出app并重新启动它时,它会很有效,它将恢复最后一个滚动位置。我不喜欢这种行为,我希望它保持在最顶层。

我在NSTableView上尝试{{1}}为NO,似乎不是我需要的选项。它仍然是旧的方式。

是否可以选择关闭此功能?

1 个答案:

答案 0 :(得分:5)

滚动位置由NSScrollView存储,自OS X Lion起实施encodeRestorableStateWithCoder: / restoreStateWithCoder:。 (Interface Builder自动将表格视图包装在NSScrollViewNSClipViewNSTableView层次结构中)。

要获得在重新启动应用后滚动到顶部的滚动视图,您有几个选项:

  • 在Interface Builder中关闭整个窗口的视图状态恢复: enter image description here
  • 子类NSScrollView并使用空实现覆盖encodeRestorableStateWithCoder:(不要忘记将其设置为IB中的表视图实例的类):
  • 在重新启动应用后,以编程方式滚动到顶部:

    - (void)applicationDidFinishLaunching:(NSNotification *)aNotification
    {
        [[self.scrollView contentView] scrollToPoint:NSMakePoint(0.0, 0.0)];
        [self.scrollView reflectScrolledClipView:[self.scrollView contentView]];
    }
    

就个人而言,我会选择方法3,因为关闭整个窗口的状态恢复可能会破坏用户期望的某些行为,并在子类化[super encodeRestorableStateWithCoder:]时调用NSView方法2 is against Apple's recommendation }。