2015-01-14 7 views
0

, 나는 NSTableView 있습니다. 기본 동작은 키보드의 스페이스 바를 클릭하여 행과 이벤트 tableView shouldSelectRow을 선택하는 것입니다.NSTableView - 스페이스 바 이벤트 리스너를 제거하는 방법? 내 Mac 응용 프로그램에서

그러나 내 경우에는 오디오 재생을 시작하고 중지하는 버튼이 있습니다. NSTableView에서 스페이스 바 처리를 제거하고 재생 버튼으로 이동하고 싶습니다.

재생할 메뉴 항목을 소개하고 스페이스 바 키를 할당했습니다. 그러나 이것은 작동하지 않습니다. 스페이스 바를 누를 때마다 메뉴 항목이 아닌 NSTableView이 실행됩니다.

제 질문은 NSTableView에서 스페이스 바를 제거 할 수 있습니까?

미리 감사드립니다.

+0

이 버튼에 해당하는 키와 스페이스 키를 할당 시도? NIB에서이 작업을 수행 할 수 있습니다. 버튼을 선택하십시오. Attributes 속성으로 전환하십시오. Key Equivalent 필드를 클릭하십시오. Space 키를 누릅니다. –

+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 
NSTableView는 서브 클래스 할 필요 피한다는 NSTableViewDelegate 프로토콜을 사용하여 수행 할 수 있습니다
2

:

- (BOOL)tableView:(NSTableView *)tableView shouldTypeSelectForEvent:(NSEvent *)event withCurrentSearchString:(NSString *)searchString { 
    return ([event.charactersIgnoringModifiers characterAtIndex:0]!=0x20); 
}