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