Переопределение keyDown: в категории NSTableView отключает обработку клавиш со стрелками

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

Если я переопределил метод keyDown: в категории следующим образом:

- (void) keyDown:(NSEvent *)event {
    [super keyDown:event];
}

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


person aneuryzm    schedule 19.12.2011    source источник
comment
где вы переопределите этот метод в своем контроллере представления?   -  person    schedule 19.12.2011
comment
Нет, в категории NSTableView. Я не писал категорию, но метод события - (void) keyDown: (NSEvent *) там переопределен.   -  person aneuryzm    schedule 19.12.2011


Ответы (1)


в категории NSTableView.

В категории NSTableView, super относится к суперклассу NSTableView (NSControl), а не к NSTableView, как в подклассе. Вы передаете событие NSControl версии keyDown:, которая ничего не знает о табличных представлениях и не может обрабатывать клавиши со стрелками так, как вы хотите.

Если вы переопределите метод в категории, нет возможности вызвать исходный метод. Практически никогда не рекомендуется делать это в классах фреймворка (чей источник вам недоступен). Используйте подкласс.

Ср. Использование Super в категории Objective C? и person jscs    schedule 19.12.2011