Решение, которое я нашел, состоит в том, чтобы имитировать нажатие клавиши возврата, которая входит в режим редактирования для ячейки после того, как ячейка была выбрана. Выбор правильного элемента остается за читателем. Честно говоря, если вы столкнулись с описанной выше проблемой, вы, вероятно, уже выбрали этот элемент раньше.
Я имитирую нажатие клавиши только в том случае, если хочу отредактировать первый столбец, хотя, вероятно, это сработает и в других столбцах, но для них я предпочитаю использовать настоящий API, то есть editItemAtIndexPath:withEvent:select:
.
Итак, сначала я проверяю длину indexPath, чтобы убедиться, что она равна 1. Если это так, следующий код имитирует нажатие и отпускание клавиши возврата. self
— это NSViewController
, поэтому вам может потребоваться настроить его в зависимости от того, откуда вызывается этот код:
NSInteger windowNumber = [[self.view window] windowNumber];
NSEvent *keyDownReturn = [NSEvent keyEventWithType:NSKeyDown location:NSZeroPoint modifierFlags:0 timestamp:GetCurrentEventTime() windowNumber:windowNumber context:[NSGraphicsContext currentContext] characters:@"\r" charactersIgnoringModifiers:@"\r" isARepeat:NO keyCode:36];
NSEvent *keyUpReturn = [NSEvent keyEventWithType:NSKeyUp location:NSZeroPoint modifierFlags:0 timestamp:GetCurrentEventTime() windowNumber:windowNumber context:[NSGraphicsContext currentContext] characters:@"\r" charactersIgnoringModifiers:@"\r" isARepeat:NO keyCode:36];
[NSApp sendEvent:keyDownReturn];
[NSApp sendEvent:keyUpReturn];
Не забудьте #import <Carbon/Carbon.h>
вместо GetCurrentEventTime()
. Мне потребовалось время, чтобы найти это.
person
Jacob Gorban
schedule
08.09.2015