如何设置UIDatePickerModeCountDownTimer的最长时间?
我想问一下如何设置iOS Count Down Timer的最长时间? (例如,最多1小时30分钟)
Count Down Timer来自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
-
声明了一个全局变量
int limiter = 0;
和以前的NSDate
持有人; -
将目标添加到
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]; }
对不起,我不能继续这个细节,我需要回家..
但希望这可以帮助你..干杯!