NSTableView навигации с помощью клавиш со стрелками - PullRequest
1 голос
/ 06 мая 2010

Как я могу перемещаться по моему виду таблицы с помощью клавиш со стрелками.Очень похоже на setAction: или setDoubleAction, но вместо того, чтобы реагировать на щелчки, реагируйте клавишами со стрелками, перемещающимися вверх или вниз по таблице.

Ответы [ 4 ]

7 голосов
/ 07 мая 2010

В вашем делегате табличного представления реализуйте tableView:shouldSelectRow:. Делай что хочешь, потом возвращай YES. Он будет срабатывать при выборе элементов в табличном представлении.

3 голосов
/ 06 мая 2010

Я не уверен, что вы имеете в виду, потому что когда я выбираю что-то в таблице, я могу перемещаться вверх и вниз по таблице с помощью клавиш со стрелками. Но если вы хотите настроить поведение больше у меня есть решение. В одном из моих приложений я хотел определить, когда была нажата клавиша возврата или ввода, а затем выполнить соответствующее действие. Я создал новый класс и сделал его подклассом NSWindow. В конструкторе интерфейса я установил главное окно, чтобы быть этим классом. Затем я переопределяю keyDown: метод NSWindow в этом подклассе. Таким образом, всякий раз, когда мое главное окно является передним (первый респондент), тогда нажатия клавиш обнаруживаются и фильтруются методом. Я уверен, что вы могли бы сделать что-то подобное для стрелочных прессов. Возможно, вы захотите сделать свой класс подклассом NSTableView вместо NSWindow в зависимости от того, как вы хотите отлавливать нажатия клавиш. Я хотел, чтобы он работал для всего приложения, но вы можете захотеть, чтобы он работал только тогда, когда табличное представление является первым респондентом.

- (void)keyDown:(NSEvent *)theEvent {
    if ([theEvent type] == NSKeyDown) {
        NSString* characters = [theEvent characters];
        if (([characters length] > 0) && (([characters characterAtIndex:0] == NSCarriageReturnCharacter) || ([characters characterAtIndex:0] == NSEnterCharacter))) {
            // do something here when return or enter is pressed
        }
    }
}
2 голосов
/ 17 июля 2014

ах! Вы случайно сломали NSTableView, сделав это?

@implementation NSTableView ( DeleteKeyCategory )
-( void ) keyDown: ( NSEvent * ) event
{
   // ... do something ...

   [super keyDown:event];
}
@end

Для меня это было отвратительным побочным эффектом ЗАМЕНЫ NSTableView keyDown: рутины, и это сломало клавиши курсора. (вроде как извергает)

Уроки, которые я выучил: - избегайте keyDown: рутина вообще. - создание подклассов Apple NSControls сохранит работу в долгосрочной перспективе.

Это ошибка, которая делает использование NSTableView очень расстраивающим. Может быть, Apple сможет обнаружить подобные вещи в статическом анализаторе?

0 голосов
/ 06 мая 2012

Стрелки используются для выбора, а не для выполнения каких-либо действий. Действие, которое будет применено к выбранному элементу , обычно устанавливается свойством "action" или "doubleAction" в TableView.

Нажатие на строку таблицы делает две разные вещи.

  1. ПОПЫТАЕТСЯ выбрать строку таблицы (иногда строка таблицы может ОТКАЗАТЬСЯ, чтобы быть выбранной, поэтому существует метод делегата shouldSelect).

  2. Если произошел новый выбор, то выполняется действие (с отправителем tableView). Там вы можете спросить у таблицы о текущем выборе и сделать с ней все, что вам нужно.

Пожалуйста, рассмотрите ситуацию, когда есть НЕСКОЛЬКО выбранных строк или выбранных столбцов, или много других сложных ситуаций.

В вашем случае --- я бы порекомендовал вам реализовать

selectionDidChange: (NSNotigivation) уведомление;

NSTableView делегатский вызов. Это называется ПОСЛЕ ТОГО, КАК изменился выбор, и к тому времени вы узнаете новый текущий выбор и делаете с выбранными элементами все, что хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...