NSTableView НЕ отвечает на клавиши со стрелками вверх / вниз - PullRequest
0 голосов
/ 28 октября 2011

У меня есть NSTableView, который не отвечает на клавиши со стрелками вверх / вниз. Исходя из моего понимания, ответ - поведение по умолчанию, поэтому я не уверен, что происходит (обратите внимание, я НЕ перезаписываю никакие команды клавиатуры). Единственная настройка, которую я делаю для моей таблицы:

[tableView setDoubleAction: @selector(doubleClickedRow)];
[tableView setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];
[tableView registerForDraggedTypes: [NSArray arrayWithObjects: NSFilenamesPboardType, nil]];
[tableView setDraggingSourceOperationMask: NSDragOperationCopy forLocal:NO];

Но из того, что я могу сказать, ни один из них не вызовет никаких проблем.

Есть ли у кого-нибудь предложения о том, где можно найти корень этой проблемы?

Ответы [ 5 ]

3 голосов
/ 10 ноября 2014

NSTableView также не будет реагировать на клавиши со стрелками, если NSWindow, которое содержит таблицу, не является окном ключа.

Ситуация, в которой это может произойти, с которой я недавно столкнулся, заключается в том, что опция внешнего вида «Заголовок» в NSWindow не установлена ​​в Интерфейсном Разработчике: это изменяет поведение NSWindow по умолчанию для отказа в статусе ключа.Смотри -[NSWindow canBecomeKeyWindow].

Таким образом, даже если NSWindow представлено в виде модального листа без строки заголовка, необходимо установить параметр «Панель заголовка», иначе ключевые события не достигнут NSTableView.

1 голос
/ 17 декабря 2011

Вы переопределили keyDown: где-нибудь?Либо в пользовательском подклассе NSTableView, либо в контроллере окна?Это может быть причиной, по которой клавиши со стрелками не работают в вашей таблице.

Я столкнулся с той же проблемой с пользовательским представлением таблицы.Я решил это, вызвав super для клавиш со стрелками, чтобы таблица могла обработать событие:

@implementation ILCustomTableView

- (void)keyDown:(NSEvent *)theEvent 
{
    if ([theEvent modifierFlags] & NSNumericPadKeyMask)
    {
        [super keyDown:theEvent];    // Let table view handle arrow keys
    } else {

        [self interpretKeyEvents:[NSArray arrayWithObject:theEvent]];        
    }
}

- (void)insertNewline:(id)sender
{
    // Enter key. Do special stuff here...
}
@end
0 голосов
/ 23 августа 2016

У меня была такая же проблема, что с помощью клавиш со стрелками делегат моего табличного представления не получил уведомления об изменении.

Это было мое решение Swift:

Сначала подклассифицирует NSTableView, а затем переопределяет этот метод.

override func keyDown(theEvent: NSEvent) {
    super.keyDown(theEvent)
    let code=theEvent.keyCode
    if code >= 123 && theEvent.keyCode <= 126 {
        if let target=target{
            target.performSelector(action)
        }
    }
}

Коды с 123 по 126: левый, правый, вниз и вверх соответственно

0 голосов
/ 06 сентября 2015

Просто столкнулся с этой проблемой, и я обнаружил, что эта строка не позволяет клавишам со стрелками вверх / вниз правильно выбирать строки.

[self.tableView setSelectionHighlightStyle:NSTableViewSelectionHighlightStyleNone];

Я пытался использовать свой собственный цвет фона, поэтому добавил это. И когда я нажимал вверх / вниз, это вызывало shouldSelectRow:, но всегда было 0! Комментирование вышеприведенной строки исправило это для меня.

0 голосов
/ 28 октября 2011

У меня есть NSTableView, который не отвечает на клавиши со стрелками вверх / вниз. Насколько я понимаю, это поведение по умолчанию

Это не поведение по умолчанию. NSTableView обрабатывает события клавиатуры и позволяет осуществлять навигацию с помощью клавиш курсора.

Может быть, вы можете отладить цепочку респондента с помощью хитрости в следующем вопросе: Как проверить цепочку респондента?

...