NSOutlineView: как перевести определенную ячейку в режим редактирования? (Метод editColumn не работает должным образом) - PullRequest
1 голос
/ 04 июля 2011

У меня есть NSOutlineView. Когда я редактирую ячейку в ней и нажимаю клавишу возврата, я бы хотел, чтобы ячейка, расположенная непосредственно под ней, немедленно перешла в режим редактирования.

Я подумал, что буду использовать метод делегата controlTextDidEndEditing:, чтобы узнать, когда редактирование ячейки закончено, и метод editColumn:row:withEvent:select:, чтобы перевести ячейку под ней в режим редактирования.

Вот демонстрационный метод, который я вставил в "appcontroller.m" проекта демонстрационного кода Apple, "DragNDropOutlineView":

- (void)controlTextDidEndEditing:(NSNotification *)aNotification
{
    NSTreeNode* treeNodeJustEdited;
    NSInteger indexOfCurrentRow = [outlineView selectedRow];
    if (indexOfCurrentRow < 0) //no row selected
        return;

    treeNodeJustEdited = [outlineView itemAtRow:indexOfCurrentRow];
    NSTreeNode* theRootNode = rootTreeNode;
    NSInteger numberOfChildren = [[theRootNode mutableChildNodes]count];
    NSInteger indexOfLastChild = numberOfChildren - 1;

    if (indexOfCurrentRow < indexOfLastChild)
    {
       [outlineView selectRowIndexes:[NSIndexSet indexSetWithIndex:indexOfCurrentRow+1] byExtendingSelection:NO];
       [outlineView editColumn:0 row: indexOfCurrentRow+1 withEvent:nil select:NO];
    }
}

По какой-то причине это делает следующее:

  • Правильно подсвечивает строку под ячейкой только что отредактировал. Но тогда:
  • Отключает выделение, то есть освещает серый
  • Делает клетку ниже клетки только что отредактированный, невидимый. Нажатие кнопки дважды в этой ячейке возвращает таблицу к норме.

Чего мне не хватает, чтобы заставить этот метод работать так, как нужно?

1 Ответ

0 голосов
/ 28 мая 2012

Вот еще один вопрос, он похож на ваш

Надеюсь, услужливо.

Редактирование NSTableView и NSOutlineView с помощью клавиши табуляции

...