【问题标题】:How to detect scrolling for NSOutlineView?如何检测 NSOutlineView 的滚动?
【发布时间】:2011-07-18 20:03:41
【问题描述】:

我有两个并排显示的 NSOutlineView,它们包含相同数量的行(这是先决条件),当用户使用鼠标、键盘或滚动条滚动时我需要同步它们,以便我看到相同的视图部分(或行)。

我是 Cocoa 领域的新手,我不知道如何实现这一点

【问题讨论】:

    标签: cocoa nsoutlineview


    【解决方案1】:

    您需要获取 NSOutlineView 的封闭滚动视图的剪辑视图:

    NSClipView * clipView = [[outlineView enclosingScrollView] contentView];
    

    ...并将其 -setPostsFrameChangedNotifications: 设置为 YES。监听来自该视图的 NSViewFrameDidChangeNotification 并做出相应的响应。

    注意:命名法不是很清楚。大多数人对 -contentView: 的第一个期望是它返回正在滚动的视图。 -contentView: 方法返回滚动视图的 NSClipView,而 -documentView: 方法返回正在滚动的实际视图。

    【讨论】:

    • 它不起作用,当我展开或折叠视图节点时会调用通知,但是当我在视图内滚动时不会调用通知
    • 问题与clipView无关,但使用NSViewFrameDidChangeNotification,当您调整视图展开项目但当您尝试在视图内滚动时不会调用。谢谢
    • 我可以发誓这是我几年前找到的解决方案。 NSViewBoundsDidChangeNotification / -setPostsBoundsChangedNotifications: 怎么样?
    • 我找到了这篇文章developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/…,但我不明白为什么该方法从未被调用。老实说,我没有子类化,只是在我的 init 方法中设置了 NSViewBoundsDidChangeNotification
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 2012-10-30
    • 1970-01-01
    • 2021-08-16
    相关资源
    最近更新 更多