NSTableView rowViewAtRow: всегда возвращает ноль - PullRequest
1 голос
/ 01 февраля 2012

Я пытаюсь отобразить NSPopover с дополнительной информацией для выбранной строки NSTableView. Для этого мне нужно получить ссылку на представление представления выбранной строки, чтобы я мог «прикрепить» к нему мой поповер:

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

В приведенном выше примере aView всегда равен нулю. Согласно документации Apple , это способ получения объекта вида по заданной строке. Особенно последнее предложение обсуждения немного странно:

Обсуждение Этот метод сначала попытается вернуть текущий отображаемый вид в видимой области. Если нет видимого вида, и makeIfNeeded это YES, подготовленное временное представление возвращается. Если makeIfNe Необходимое НЕТ, и представление не видимо, ноль будет вернулся.

Как правило, makeIfNeeded должно быть ДА, если вам требуется вид, и НЕТ, если вы хотите обновить свойства только в том случае, если оно доступно (обычно это означает, что оно видно).

Будет сгенерировано исключение, если строка не входит в число NumberOfRows. возвращаемый результат, как правило, не должен храниться дольше, чем текущий цикл цикла выполнения. Лучше позвонить rowViewAtRow: makeIfNeeded: всякий раз, когда требуется представление ..

Почему этот метод всегда возвращает ноль?

Ответы [ 2 ]

1 голос
/ 01 февраля 2012

Решил это.Я использовал метод NSTableView (NSRect) rectOfRow: (NSInteger) rowIndex, который даст кадр требуемой строки.

0 голосов
/ 26 января 2013

Спасибо, что показали мне правильное направление, у меня была такая же проблема! В итоге я сделал следующее, но учтите, что я отключил выбор пустых строк и что следующий код находится внутри IBAction:

    [popOver showRelativeToRect:[sender bounds]
                         ofView:[sender rowViewAtRow:[sender selectedRow]
                                     makeIfNecessary:YES]
                  preferredEdge:NSMaxXEdge];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...