2012-04-19 2 views
1

Есть ли вид, похожий на NSDatePicker для OS X, но для выбора продолжительности (т. Е. Часов, минут и секунд), а не целых дат. Поиск Google не принес ничего полезного, и мне еще не удалось настроить NSDatePicker, чтобы быть подходящим только для продолжительности - мои попытки не работают должным образом с 12-часовыми (AM и PM) режимами времени и разными часовыми поясами.AppKit: Duration Picker View

+0

Когда вы говорите длительности, вы имеете в виду, что вы хотите, скажем, 10:30:05, означает 10 часы 30 минут и 5 секунд, а не время 10:30:05? Какой диапазон значений вы хотите, например, хотите ли вы установить часы на двойные цифры, тройные цифры? – rdelmar

+0

Да, это то, что я имею в виду с продолжительностью. Достаточно одного разряда. Если вы можете привести пример, чтобы настроить 'NSDatePicker', чтобы вести себя так (без глюков!), Этого было бы достаточно. – MrMage

+0

См. Мой отредактированный ответ – rdelmar

ответ

1

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

Я думаю, что нашел способ, который работает с сборщиком NSDate. Я не уверен, почему некоторые из них работают, но, похоже, необходимо установить локаль где-нибудь, где используются 24-часовые часы, такие как Япония, и установите календарь для сборщика. Единственный «глюк», который я вижу, заключается в том, что при вводе некоторых 1-значных чисел происходит немного задержки (это то, что Apple изменилось в OS X 10.5. Я думаю, что редактор ждет, чтобы увидеть, хотите ли вы добавить вторую цифра). Тем не менее, вы можете получить его для немедленного обновления путем внесения вкладок из поля или щелчка в другом поле. Так вот установка:

self.picker.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"ja_JP"]; 
    self.cal = [NSCalendar currentCalendar]; 
    self.cal.timeZone = [NSTimeZone timeZoneWithName:@"GMT"]; 
    self.picker.calendar = self.cal; 
    self.picker.timeZone = cal.timeZone; 

А вот метод действия для подборщика:

-(IBAction)dpClick:(NSDatePicker *)sender { 
    NSDateComponents *comps = [cal components:NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit fromDate:sender.objectValue]; 
    NSLog(@"hours=%ld minutes=%ld seconds=%ld",comps.hour,comps.minute,comps.second); 
} 
+0

Это решение работает. Благодаря! – MrMage

0

Вы можете использовать -[NSDatePicker setDatePickerElements:] method, чтобы настроить сборщик дат только для отображения временной части даты.

+1

Да, но он по-прежнему ведет себя странно в некоторых случаях из-за часовых поясов и настроек AM/PM ... – MrMage