在滚动时获取列表元素边界或框架

时间:2011-03-21 15:46:01

标签: objective-c cocoa

此问题与Get scroll bar position of an NSScroller on the fly

有关

但现在我想知道如何在滚动时获取列表元素(绿色矩形)的当前位置。 enter image description here

[self bounds][self frame][[self enclosingScrollView] ...]不会用于此类操作,或者我以错误的方式使用它。

修改

[[NSScrollView enclosingScrollView] contentView]]的内部框架中,我们看到了NSBox的列表。 当我点击NSBox的三角形作为列表元素时,NSBox的实例存储在-activeTicketRow中,我认为我可以在NSBox内获得NSScrollView坐标当[[NSScrollView enclosingScrollView] contentView]]边界发生变化时{1}}框架,但在阅读“查看编程指南”后我猜不会。

我在NSScrollView

中添加了观察者
[[NSNotificationCenter defaultCenter] 
    addObserver:self
    selector:@selector(updateConvMenu:)
    name:NSViewBoundsDidChangeNotification
    object:[[self enclosingScrollView] contentView]
];

并且在-updateConvMenu我得到了[[self enclosingScrollView] contentView]的坐标,所以这很好。

问题

不,我想在NSBox内的[[self enclosingScrollView] contentView]内存储-activeTicketRow(点击了哪个三角形),这样我就可以在-updateConvMenu [[self enclosingScrollView] contentView]时获取它的帧坐标边界变化。

我认为现在这个问题更具可读性。

3 个答案:

答案 0 :(得分:0)

视图位于层次结构中。问自己“相对于什么视图/窗口/屏幕的位置?”然后使用NSView的各种-convertRect:...或NSWindow的-convert ...方法。

答案 1 :(得分:0)

您可以通过设置NSClipView来观察contentView s(滚动视图的- (void)setPostsBoundsChangedNotifications:YES)边界来获取内容视图的位置。然后在发生通知时将坐标转换为所需的视图。

有关翻译的内容,请查看Josh已发布的文档View Programming Guide

答案 2 :(得分:0)

滚动列表时,我正在计算列表中所选项目的水平中心是否不在特定边界之后,[NSScrollView frame]重叠。