2012-03-14 1 views
3

NSTableView не получает событие клавиатуры пробела.Все NSTableView в моем проекте не получают событие клавиатуры панели пробелов

Когда я нажимаю keyUp или keyDown, выбор изменяется правильно, но я не могу проверить/снять флажок в первом столбце, нажав пробел.

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

Кроме того, я только что проверил для любого метода делегата в моем коде, что может помешать:

- (void)sendEvent:(NSEvent *)event; 
- (BOOL)handleEvent:(NSEvent *)event; 
- (void) keyDown:(NSEvent *)event; 

и комментировал их, но пробел все еще не работает. Спасибо

+0

Кто-нибудь с любым наконечником? – aneuryzm

ответ

2

Я действительно выяснил причину. Неверно, что пробел проверяет элементы таблицы по умолчанию.

Работает только в том случае, если выбраны системные настройки> Клавиатура> Клавиши со стрелками клавиатуры> Все кнопки управления.

4

Проверка на то, что функция выбора типа не использует ваши пробелы. Я видел эту проблему в прошлом. Вы можете позвонить по телефону [yourTableView setAllowsTypeSelect:NO], чтобы отключить его. Однако, по какой-то причине, в одном случае, единственный способ, которым я смог успешно обойти это реализовать метод NSTableViewDelegate -tableView:typeSelectStringForTableColumn:row: и возвращать ноль:

- (NSString *)tableView:(NSTableView *)tableView typeSelectStringForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row 
{ 
    return nil; 
} 

Это отключит тип выбрать все вместе. В моем случае это было хорошо. Как поясняется в документации:

Возврат nil, если строку или стол не нужно искать.

Другой вариант может заключаться в том, чтобы реализовать -tableView:shouldTypeSelectForEvent:withCurrentSearchString: и возвращать НЕТ, если ключ события имеет значение 49 (пробел). Таким образом, выбор типа остается включенным, а только пробел, который игнорируется.

Это всего лишь одна идея. На самом деле это может быть не то, что вызывает вашу проблему, но я видел идентичные симптомы в прошлом, и выбор типа был причиной.

+0

Привет, спасибо за все эти решения. Я реализовал их все, я уверен, что методы делегата, которые вы предложили, вызывают, и я также отключил выбор типа (в построителе интерфейса). Но я еще не могу установить флажок. Может быть, проблема в другом месте? – aneuryzm

+0

Так как у меня такая же проблема со всеми таблицами в моем проекте, может быть, некоторые общие настройки? – aneuryzm

+0

Я решил. Проверьте мой другой ответ ... – aneuryzm