此问题与Get scroll bar position of an NSScroller on the fly
有关但现在我想知道如何在滚动时获取列表元素(绿色矩形)的当前位置。
[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]
时获取它的帧坐标边界变化。
我认为现在这个问题更具可读性。
答案 0 :(得分:0)
视图位于层次结构中。问自己“相对于什么视图/窗口/屏幕的位置?”然后使用NSView的各种-convertRect:...或NSWindow的-convert ...方法。
答案 1 :(得分:0)
您可以通过设置NSClipView
来观察contentView
s(滚动视图的- (void)setPostsBoundsChangedNotifications:YES
)边界来获取内容视图的位置。然后在发生通知时将坐标转换为所需的视图。
有关翻译的内容,请查看Josh已发布的文档View Programming Guide
答案 2 :(得分:0)
滚动列表时,我正在计算列表中所选项目的水平中心是否不在特定边界之后,[NSScrollView frame]
重叠。