2013-08-31 7 views
0

이것은 간단하지만 필수적인 것처럼 보입니다.그래픽 NSDatePicker에서 화살표 키를 어떻게 작동시킬 수 있습니까?

NSDatePicker (스타일 : 그래픽)를 창에 배치하고 &을 빌드 한 다음 화살표 키를 사용하여 이동하십시오. 유일한 응답은 컴퓨터에서 '땡땡이'입니다.

나는 간단한 사용자 정의 NSDatePicker 서브 클래스에서 -keydown을 무시했습니다

하고 theEvent들이 그런 다음 126

을 통해 (123)의 해당 키 코드를 통지 인쇄, 나는 내 각 화살표 버튼을 누른 후 날짜 선택 날짜를 재설정 우연히 발견 그래서 같은 -keydown :

- (void)keyDown:(NSEvent *)theEvent 
    switch ([[theEvent valueForKey:@"keyCode"] integerValue]) { 
     case 126: 
      // Take away one week from the date 
      self.dateValue = [NSDate dateWithTimeInterval:-604800 sinceDate:self.dateValue]; 
      break; 
     .... similar for 125 - 123 ... 
    } 
} 

이 방법을 구현 객체를 통해 스테핑하기위한 '탭'키를 빼앗아의 부작용을 갖는다.

이 큰 해결 방법처럼 보인다. 이미 다른 방법은 이미 날짜 선택기에 포함되어 있습니까 ??

답변

0

나는이 질문은 정말 오래 실현,하지만 난 그냥이 작업을했다, 그래서 ... 아래의 접근 방법은 나를 위해 작동합니다.

- (void)keyDown:(NSEvent *)theEvent 
{ 
    NSString* replacementKey = nil; 

    switch ([theEvent keyCode]) 
    { 
     case 123: // Left arrow 
      replacementKey = @"-"; 
      break; 
     case 124: // Right arrow 
      replacementKey = @"+"; 
      break; 
     case 125: // Down arrow 
      replacementKey = @"]"; 
      break; 
     case 126: // Up arrow 
      replacementKey = @"["; 
      break; 
     case 53: // esc 
     case 36: // return -- don't assign replacement key and these will dismiss date picker 
      break; 

     default: 
      replacementKey = [theEvent charactersIgnoringModifiers]; 
      break; 
    } 

    if (replacementKey) // 'letter' based shortcut keys 
    { 
     [self.textFieldCell dateShortcut:replacementKey]; 
     [self updateGraphicalCalendar]; 
    } 
    else 
    {  
     [self.textFieldCell hidegraphicCalendar]; 
    } 
} 

사용자 지정 NSTextFieldCell과 관련된 그래픽 날짜 선택 도구입니다. 사용자 정의 textfieldcell은 다음과 같이 선택한 날짜를 수정하여 바로 가기 키 ("replacementKey")를 처리합니다.

if (NSOrderedSame == [shortcut caseInsensitiveCompare:@"+"] || NSOrderedSame == [shortcut caseInsensitiveCompare:@"="]) // '=' is unshifted '+' 
{ 
    emptyComponents.day = 1; 
    currentDateValue = [calendar dateByAddingComponents:emptyComponents toDate:currentDateValue options:0]; 
} 

else if (NSOrderedSame == [shortcut caseInsensitiveCompare:@"-"]) 
{ 
    emptyComponents.day = -1; 
    currentDateValue = [calendar dateByAddingComponents:emptyComponents toDate:currentDateValue options:0]; 
} 

else if (NSOrderedSame == [shortcut caseInsensitiveCompare:@"["]) // same day in previous week 
{ 
    emptyComponents.day = -7; 
    currentDateValue = [calendar dateByAddingComponents:emptyComponents toDate:currentDateValue options:0]; 
} 

else if (NSOrderedSame == [shortcut caseInsensitiveCompare:@"]"]) // same day in next week 
{ 
    emptyComponents.day = 7; 
    currentDateValue = [calendar dateByAddingComponents:emptyComponents toDate:currentDateValue options:0]; 
} 
+0

대답이 대답보다 낫습니다! 솔루션을 추가해 주셔서 감사합니다. – David