У меня есть 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];
}
}
По какой-то причине это делает следующее:
- Правильно подсвечивает строку под ячейкой
только что отредактировал. Но тогда:
- Отключает
выделение, то есть освещает
серый
- Делает клетку ниже клетки
только что отредактированный, невидимый. Нажатие кнопки
дважды в этой ячейке возвращает таблицу
к норме.
Чего мне не хватает, чтобы заставить этот метод работать так, как нужно?