2012-01-31 133 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];