Начать редактирование первого столбца NSBrowser

AppKit-х NSBrowser кажется, есть ошибка, где метод */ - (void)editItemAtIndexPath:(NSIndexPath *)indexPath withEvent:(NSEvent *)theEvent select:(BOOL)select не работает для первого столбца в браузере. Если indexPath указывает на элемент в первом столбце, ничего не происходит. Есть еще одно свидетельство на http://www.cocoabuilder.com/archive/cocoa/327335-nsbrowser-edititematindexpath-withevent-select.html.

Я работал над решением этой ошибки. Смотрите мой ответ для кода.

1 ответ

Решение, которое я нашел, состоит в том, чтобы смоделировать нажатие клавиши возврата, которая входит в режим редактирования для ячейки после того, как ячейка была выбрана. Выбор правильного предмета оставлен на усмотрение читателя. Честно говоря, если вы столкнулись с проблемой выше, вы, вероятно, уже выбрали этот пункт раньше.

Я имитирую нажатие клавиш только в том случае, если я хочу отредактировать первый столбец, хотя он, вероятно, будет работать и в других столбцах, но для них я предпочитаю использовать настоящий 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(), Мне понадобилось время, чтобы найти это.

Другие вопросы по тегам