NSTableView rowViewAtRow:总是返回nil

时间:2012-01-31 22:05:01

标签: cocoa nstableview

我正在尝试向NSPopover的选定行显示NSTableView以及其他信息。为此我需要获得对所选行的视图表示的引用,以便我可以“附加”我的popover到它:

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

在上面,aView的结果总是为零。根据{{​​3}},这是在给定选定行的情况下获取视图对象的方法。特别是讨论的最后一句话有点奇怪:

  

讨论此方法将首先尝试返回当前   显示在可见区域中的视图。如果没有可见的视图,和   makeIfNecessary为YES,返回准备好的临时视图。如果   makeIfNecessary为NO,并且视图不可见,nil将是   返回。

     

通常,如果您需要结果,makeIfNecessary应为YES   view,如果您只想更新视图上的属性,则选择NO   它是可用的(通常这意味着它是可见的)。

     

如果row不在numberOfRows中,则抛出异常。该   返回的结果通常不应该持续超过   当前运行循环周期。最好打电话   rowViewAtRow:makeIfNecessary:每当需要视图时..

为什么这个方法总是返回nil?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

感谢您向我展示正确的方向,我遇到了同样的问题!我最后做了以下操作,但请注意我禁用了空行的选择,并且以下代码位于IBAction内:

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