如何设置UIDatePickerModeCountDownTimer的最长时间?

He *_*何一非 5 uidatepicker ios swift

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

倒计时器从UIDatePicker模式开始:

的UIDatePicker

谢谢!

编辑:

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

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

最大/最小时间设置

编辑:

来自Apple:

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

无论如何他们这样做呢?

Luk*_*etr 7

虽然Niko的解决方案有效,但缺点是小时数仍然很大.如果你想要实际限制显示的小时数,我为此目的构建了一个自定义选择器.它是一个子类,UIPickerView它在countDownTimer模式下复制UIDatePicker的功能,同时添加对set的支持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
};
Run Code Online (Sandbox Code Playgroud)

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


Nik*_*iko 4

对于 UIDatePickerModeCountDownTimer 的情况,您可以以编程方式处理它

添加一个当 your 的值UIDatePicker发生变化时调用的事件。

Objective-C

[self.datePicker addTarget:self action:@selector(datePickedValueChanged:)
     forControlEvents:UIControlEventValueChanged];
Run Code Online (Sandbox Code Playgroud)

迅速

self.datePicker.addTarget(self, action: Selector("datePickedValueChanged:"), forControlEvents: UIControlEvents.ValueChanged)
Run Code Online (Sandbox Code Playgroud)

然后,如果所选的值超出允许的选择范围,您可以将 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
    }
}
Run Code Online (Sandbox Code Playgroud)

迅速

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

-- 之前的回答:

我将之前的答案留给使用UIDatePickerDate 或 DateAndTime 模式的其他人,如果这可以帮助某些人

您可以设置 的最小和最大日期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];
Run Code Online (Sandbox Code Playgroud)