2012-01-31 135 views
1

我試圖顯示一個NSPopover以及NSTableView的選定行的附加信息。爲此,我需要去選擇行的視圖呈現中的基準,所以我可以「附加」我酥料餅吧:NSTableView rowViewAtRow:總是返回零

NSInteger row = [[self membersTableView] selectedRow]; 
    NSTableRowView *aView = [[self membersTableView] rowViewAtRow: row makeIfNecessary: YES]; 
    [self setQuickLookPopoverController: [QuickLookPopoverController showPopoverFor: anObject at: aView]]; 

在上述情況中,aView結果始終爲零。根據Apple documentation,這是獲取視圖對象的方法,給定一個選定的行。特別是在討論的最後一句話是有點不可思議:

討論此方法將首先嚐試返回當前 於可視區域內顯示的視圖。如果沒有可見視圖,並且makeIfNecessary爲YES,則返回一個準備好的臨時視圖。如果 makeIfNecessary是NO,並且視圖不可見,則返回nil 。

一般來說,makeIfNecessary應該是YES,如果你需要產生 視圖,NO,如果你只是想更新視圖屬性只有 它是可用(通常這意味着它是可見的)。

如果row不在numberOfRows中,則會引發異常。返回的結果通常不應超過當前運行循環週期的時間。這是更好地撥打 rowViewAtRow:makeIfNecessary:每當需要的視圖..

爲什麼這個方法總是返回零?

回答

1

解決了它。我使用NSTableView的方法(NSRect) rectOfRow: (NSInteger) rowIndex,它將給出所需行的框架。

0

感謝您向我展示正確的方向,我有同樣的問題!我結束了以下工作,但請注意,我禁用了空行選擇,並且以下代碼位於IBAction之內:

[popOver showRelativeToRect:[sender bounds] 
         ofView:[sender rowViewAtRow:[sender selectedRow] 
            makeIfNecessary:YES] 
        preferredEdge:NSMaxXEdge];