如何设置UIDatePickerModeCountDownTimer的最长时间?

我想问一下如何设置iOS Count Down Timer的最长时间? (例如,最多1小时30分钟)

Count Down Timer来自UIDatePicker的模式:

的UIDatePicker

谢谢!

编辑:

有人说我必须设置最小/最大日期,我只是在故事板中设置它们但我没有看到任何区别:

(设置时间是我当地时间+ – 30分钟)

最大/最小时间设置

编辑:

来自Apple:

倒数计时器模式(UIDatePickerModeCountDownTimer)中也会忽略最小和最大日期。

无论如何他们这样做呢?

对于UIDatePickerModeCountDownTimer,您可以通过编程方式处理它

添加一个在UIDatePicker的值发生更改时调用的事件。

Objective-C的

 [self.datePicker addTarget:self action:@selector(datePickedValueChanged:) forControlEvents:UIControlEventValueChanged]; 

迅速

 self.datePicker.addTarget(self, action: Selector("datePickedValueChanged:"), forControlEvents: UIControlEvents.ValueChanged) 

然后,如果所选值超出允许选择范围,您可以将DatePicker设置为允许的最大值(或任何您想要的值)

Objective-C的

 - (void)datePickedValueChanged:(id)sender{ if (self.datePicker.countDownDuration > 5400.0f) { //5400 seconds = 1h30min [self.datePicker setCountDownDuration: 60.0f]; //Defaults to 1 minute } } 

迅速

 func datePickedValueChanged (sender: UIDatePicker) { if (self.datePicker.countDownDuration > 5400) { //5400 seconds = 1h30min self.datePicker.countDownDuration = 60.0; //Defaults to 1 minute } } 

– 以前的答案:

我在Date或DateAndTime模式下使用UIDatePicker为其他人留下以前的答案,如果这可以帮助某些人

您可以设置UIDatePicker最短和最长日期。

在这里,用户无法在当前时间之前选择时间,只需前进1小时30分钟。

任何选择另一个时间的尝试都会使UIDatePicker自动返回到允许的时间间隔。

 NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDate *currentDate = [NSDate date]; NSDateComponents *dateDelta = [[NSDateComponents alloc] init]; [dateDelta setDay:0]; [dateDelta setHour:1]; [dateDelta setMinute:30]; NSDate *maximumDate = [calendar dateByAddingComponents:dateDelta toDate:currentDate options:0]; [self.datePicker setMaximumDate:maximumDate]; [dateDelta setDay:0]; [dateDelta setHour:0]; [dateDelta setMinute:0]; NSDate *minimumDate = [calendar dateByAddingComponents:dateDelta toDate:currentDate options:0]; [self.datePicker setMinimumDate:minimumDate]; 

虽然Niko的解决方案有效,但它的缺点是小时数仍然很大。 如果你想要实际限制显示的小时数,我为此目的构建了一个自定义选择器。 它是UIPickerView的子类,它在countDownTimer模式下复制UIDatePicker的function,同时添加对maxTimeInterval支持。

在此处输入图像描述

你这样使用它:

 GSTimeIntervalPicker *picker = [[GSTimeIntervalPicker alloc] init]; picker.maxTimeInterval = (3600 * 3); // set the limit picker.minuteInterval = 5; // the step. Default is 1 min. picker.timeInterval = (3600 * 1.5); // 1 h 30 minutes picker.onTimeIntervalChanged = ^(NSTimeInterval newTimeInterval) { // Use the value }; 

可在MIT许可下的GitHub上获得。 博客文章在这里 。

您可以使用NSTimer并设置间隔,然后更新NSDatePicker

  1. 声明了一个全局变量int limiter = 0; 和以前的NSDate持有人;

  2. 将目标添加到NSDatePicker


 [self.YourDatePicker addTarget:self action:@selector(dateChanged:)forControlEvents:UIControlEventValueChanged]; 

将间隔设置为60 == 1min

 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:60 target:self selector:@selector(updateTime) userInfo:nil repeats:YES]; 

 - (void) dateChanged:(UIDatePicker *)sender { // handle date changes NSDate *set = sender.date; // time setted // compute the difference base from this to `[NSDate timeIntervalSinceDate:]` NSDate *now = [NSDate date]; // logic `limit = now - set (greater then the current time)` } - (void)updateTime { NSLog(@"fired"); limiter--; // if (limiter == 0) { // TIME IS UP [timer invalidate]; return; } NSDate *now = self.fourthProfileBirthdate.date; NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDateComponents *offsetComponents = [[NSDateComponents alloc] init]; [offsetComponents setYear:-1]; // countdown subtracting here from the current time // NSDate self.YourDatePicker.date = [gregorian dateByAddingComponents:offsetComponents toDate:now options:0]; } 

对不起,我不能继续这个细节,我需要回家..

但希望这可以帮助你..干杯!