2010-05-05 4 views
1

화살표 키를 사용하여 테이블보기를 탐색하려면 어떻게해야합니까? setAction: 또는 setDoubleAction과 비슷하지만 클릭에 반응하는 대신 화살표 키로 반응하여 테이블을 위아래로 움직입니다.NSTableView 화살표 키로 이동

+0

이 질문은 의미가 없습니다. 다시 읽으시겠습니까? 테이블보기를 탐색하는 사람에게 반응하고 싶습니까? –

+0

예. 'setAction'이 클릭에 대해 어떻게 작동하는지와 비슷하지만 화살표 키로 작동하는 것과 비슷한 것을 원합니다. –

+1

화살표 키는 "그냥 작동합니다", 추가 작업은 필요 없습니다. – junglecat

답변

7

tableView:shouldSelectRow:을 구현하십시오. 원하는 것을 수행 한 다음 YES을 반환하십시오. 테이블보기에서 항목을 선택하면 트리거됩니다.

+0

은 훌륭하게 작동합니다. 감사!!! –

+0

이 솔루션을 시도하면서 화살표 키를 사용하여 위아래로 이동할 때 shouldSelectRow가 매번 YES로 응답하더라도 내 tableViewSelected 메서드가 호출되지 않는다는 것을 발견했습니다. 필자는 결국 포커스가 바뀔 때마다 필요로하는 디스플레이의 다른 측면을 수행하기 위해 tableViewSelected 및 shouldSelectRow에서 별도의 루틴을 호출했습니다. 나는 그것이 당신이 원한다 무엇 이건을해서 응답이 의미하는 무슨이라고 짐작한다. –

3

나는 테이블에서 무언가를 선택할 때 화살표 키를 사용하여 테이블에서 위아래로 움직일 수 있기 때문에 무슨 뜻인지 잘 모르겠습니다. 그러나 당신이 행동을 더 커스터마이징하고 싶다면 나는 해결책을 가지고있다. 내 애플 리케이션 중 하나에서 반환 또는 엔터 키가 눌 렸을 때를 감지하고 이에 따라 조치를 취하고 싶었다. 나는 새 클래스를 만들어 NSWindow의 하위 클래스로 만들었습니다. 인터페이스 빌더에서 나는 메인 윈도우를이 클래스로 설정했다. 그런 다음 해당 하위 클래스의 NSWindow의 keyDown : 메서드를 재정의합니다. 따라서 메인 윈도우가 가장 앞에있을 때 (첫 번째 응답자) 키 누름이 감지되고 필터링됩니다. 화살표 프레스와 비슷한 것을 할 수있을 것이라고 확신합니다. 키 프레스를 잡는 방법에 따라 NSWindow 대신 클래스를 NSTableView의 하위 클래스로 만들 수 있습니다. 전체 응용 프로그램에서 작동하고 싶었지만 테이블보기가 첫 번째 응답자 일 때만 작동하도록 할 수 있습니다.

- (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 
     } 
    } 
} 
+0

사람들이 내가 묻는 것을 왜 이해하지 못하는지 이해할 수 없습니다. 클릭하기 만하면 화살표 키를 대신 사용할 수 있습니다. 그래서 내가 x 행을 향해 아래로 화살을 대면'setAction'이 어떻게 클릭하는지에 대한 액션을 수행 할 것입니다. –

0

화살표는 선택을 위해 사용 되었기 때문에 의미가 없습니다. 어떤 동작도 수행하지 않기 때문에. 선택된 항목에 적용될 작업은 일반적으로 TableView의 "작업"또는 "doubleAction"속성에 의해 설정됩니다.

테이블 행을 클릭하면 두 가지 작업이 수행됩니다.

  1. 테이블 행을 (때로는 테이블 행은 "shouldSelect"위임 방법이있다 그 이유는, 선택을 거부 할 수 있습니다)를 선택하려고합니다.

  2. 새 선택이 수행되면 작업이 수행됩니다 (보낸 사람으로 tableView 사용). 여기서 테이블에 현재 선택 항목을 요청하고 필요한 항목을 수행 할 수 있습니다.

여러 개의 선택된 행이나 선택한 열 또는 기타 복잡한 상황이있는 경우를 고려하십시오. 귀하의 경우에는

는 --- 내가 추천 할 것입니다 무엇을, 당신은

selectionDidChange 구현하는 것입니다 : (NSNotigivation) 통지를;

NSTableView 대리인 호출. 이것은 AFTER selection이 변경된 것으로 불리는데, 그때까지 새로운 현재 선택을 알고 선택한 항목으로 원하는 것을하십시오.

2

aha! 실수로 NSTableView를 휴면 했습니까?

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

    [super keyDown:event]; 
} 
@end 

은 나를 위해,이 NSTableView는의를 keyDown 교체의 사악한 부작용이 있었다 : 루틴을, 그리고 커서 키를 끊었다. (swisszling과 같은)

내가 배운 교훈 : - keyDown : 루틴을 모두 피하십시오. - Apple NSControls를 서브 클래 싱하면 장기적으로 작업을 저장할 수 있습니다.

이것은 NSTableView를 매우 실망하게 만드는 실수 유형입니다. 애플은 정적 분석기에서 이런 종류의 것을 감지 할 수 있을까요?

+0

그렇기 때문에 나는 여기에있다;) 나는 슈퍼를 부르는 것을 잊었다. –

관련 문제