2013-08-31 1 views
0

Это кажется простым, но существенным.Как можно использовать клавиши со стрелками для графического NSDatePicker?

Поместите NSDatePicker (стиль: графический) в окно, выполните команду &, затем попытайтесь использовать клавиши со стрелками для перемещения. Единственный ответ - это «динг» с компьютера.

Я переопределены -keydown в простой обычай NSDatePicker подкласса и распечатаны theEvent заметить у них есть соответствующие Кодовые ключи от 123 через 126

Затем я наткнулся на сброс даты в Date Picker после каждой кнопки со стрелкой печати, внутри -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. Пользовательская текстовая ячейка обрабатывает сочетания клавиш («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