2015-01-14 2 views
0

в моем приложении Mac, у меня есть NSTableView. Поведение по умолчанию заключается в том, что нажатие на пробел на клавиатуре выбирает строку и событие tableView shouldSelectRow.NSTableView - Как удалить прослушиватель событий пробела?

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

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

Мой вопрос: Как удалить прослушиватель пробела из NSTableView?

благодарит заранее.

+0

Вы пытались назначить клавишу Пробел в качестве ключевого эквивалента кнопки? Вы можете сделать это в NIB. Выберите кнопку. Переключитесь на инспектор атрибутов. Нажмите на поле «Эквивалент ключа». Нажмите клавишу пробела. –

+0

Привет @KenThomases, это на самом деле хорошая идея, и, похоже, она работает, но NSTableView все еще срабатывает shouldSelectRow. Мне нужно как-то удалить пространство, запускающее событие shouldSelectRow. Есть идеи ? – Mozzak

+0

Запишите результат '[NSThread callStackSymbols]' из метода делегата и отредактируйте свой вопрос, чтобы включить его. –

ответ

1

Я нашел решение проблемы.

Я перезаписываю свой NSTableView и внедрил событие keyDown, где я смог перехватить событие клавиши пробела.

@implementation AudioFileTableView 

- (void)drawRect:(NSRect)dirtyRect { 
    [super drawRect:dirtyRect]; 

    // Drawing code here. 
} 

-(void)keyDown:(NSEvent *)theEvent{ 

    unichar key = [[theEvent charactersIgnoringModifiers] characterAtIndex:0]; 

    if(key == 0x0020) 
    { 
     // handle the spacebar event 
     return; 
    } 

    [super keyDown:theEvent]; 
} 

@end 
2

Это может быть сделано с использованием протокола NSTableViewDelegate, избавляет от необходимости подкласс NSTableView:

- (BOOL)tableView:(NSTableView *)tableView shouldTypeSelectForEvent:(NSEvent *)event withCurrentSearchString:(NSString *)searchString { 
    return ([event.charactersIgnoringModifiers characterAtIndex:0]!=0x20); 
} 
Смежные вопросы