2011-03-21 62 views
0

這個問題是有關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點擊,我一直以爲我可以再進去NSScrollView框架NSBox座標時[[NSScrollView enclosingScrollView] contentView]]範圍的更改,但看完「查看編程指南」後,我可能不會。

我在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

當滾動列表,我計算是否所選項目的列表中的水平中心的特定範圍後不走,其重疊於[NSScrollView frame]

0

視圖處於層次結構中。問問自己「相對於視圖/窗口/屏幕的位置?」然後使用NSView的各種-convertRect:...或NSWindow的-convert ...方法。

+0

它應該是相對於窗口。 當我使用'[self convertRect:[[[NSApp delegate] activeTicketRow] bounds] fromView:nil]'activeTabTicket'是列表元素,我得到了很好的座標,但他們指向項目的原始位置,他們不當我滾動列表時改變。 – xyz 2011-03-21 16:24:05

+0

什麼是自我?你確定你想要窗口座標嗎?如果您嘗試使用彈出式窗口,則幾乎肯定需要屏幕座標。您的-activeTicketRow的邊界在哪個座標空間中生存?你確定這一切都是你認爲的嗎?我不打賭。 – 2011-03-21 16:33:40

+0

我真的認爲你需要研究視圖幾何http://developer.apple。com/library/mac /#documentation/Cocoa/Conceptual/CocoaViewsGuide/Coordinates/Coordinates.html%23 // apple_ref/doc/uid/TP40002978-CH10-SW1 and view hierarchy http://developer.apple.com/library/ mac /#documentation/Cocoa/Conceptual/CocoaViewsGuide/Coordinates/Coordinates.html%23 // apple_ref/doc/uid/TP40002978-CH10-SW1 ... – 2011-03-21 16:34:53

0

您可以通過設置- (void)setPostsBoundsChangedNotifications:YES觀察NSClipView s(滾動視圖的contentView)範圍來獲取內容視圖的位置。然後,只要在發生通知時將座標轉換爲您想要的視圖。

對於翻譯看看該文檔喬希也已經發布View Programming Guide