2015-09-08 2 views
0

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

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

ответ

0

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

Я только имитирую нажатие клавиши, если я хочу отредактировать первый столбец, хотя он, вероятно, будет работать и в других столбцах, но для них я предпочитаю использовать настоящий API, то есть editItemAtIndexPath:withEvent:select:.

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

Смежные вопросы