如何设置 UIDatePickerModeCountDownTimer 的最长时间?
How can I set the UIDatePickerModeCountDownTimer's maximum time?
请问如何设置iOS倒计时的最长时间? (例如最多 1 小时 30 分钟)
倒数计时器是从UIDatePicker
的模式中获取的:
谢谢!
编辑:
有人说我必须设置 minimum/maximum 日期,我只是在情节提要中设置了它们,但我看不出有什么区别:
(设置的时间是我当地时间+- 30分钟)
编辑:
来自苹果:
在倒数计时器模式 (UIDatePickerModeCountDownTimer) 中也忽略最小和最大日期。
那么他们到底要这样做吗?
对于 UIDatePickerModeCountDownTimer,您可以通过编程方式处理它
添加一个在 UIDatePicker
的值发生变化时调用的事件。
Objective-C
[self.datePicker addTarget:self action:@selector(datePickedValueChanged:)
forControlEvents:UIControlEventValueChanged];
Swift
self.datePicker.addTarget(self, action: Selector("datePickedValueChanged:"), forControlEvents: UIControlEvents.ValueChanged)
然后,如果值 selected 超出了允许的 selection,您可以将 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
}
}
Swift
func datePickedValueChanged (sender: UIDatePicker) {
if (self.datePicker.countDownDuration > 5400) { //5400 seconds = 1h30min
self.datePicker.countDownDuration = 60.0; //Defaults to 1 minute
}
}
-- 之前的回答:
我在日期或日期和时间模式下使用 UIDatePicker
将之前的答案留给其他人,如果这可以帮助某些人
您可以设置 UIDatePicker
的最小和最大日期。
这里用户不能select现在时间之前的时间,只能提前1小时30分钟。
任何 select 另一个时间的尝试都会使 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];
您可以使用 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];
}
抱歉,我无法继续详细介绍,我需要回家..
但希望这对您有所帮助..干杯!
虽然 Niko 的解决方案有效,但缺点是小时数仍然很大。如果您想实际限制显示的时间,我为此目的构建了一个自定义选择器。它是 UIPickerView
的子类,它在 countDownTimer 模式下复制了 UIDatePicker 的功能,同时添加了对设置 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
};
根据麻省理工学院许可,GitHub 可用。博客 post here.
请问如何设置iOS倒计时的最长时间? (例如最多 1 小时 30 分钟)
倒数计时器是从UIDatePicker
的模式中获取的:
谢谢!
编辑:
有人说我必须设置 minimum/maximum 日期,我只是在情节提要中设置了它们,但我看不出有什么区别:
(设置的时间是我当地时间+- 30分钟)
编辑:
来自苹果:
在倒数计时器模式 (UIDatePickerModeCountDownTimer) 中也忽略最小和最大日期。
那么他们到底要这样做吗?
对于 UIDatePickerModeCountDownTimer,您可以通过编程方式处理它
添加一个在 UIDatePicker
的值发生变化时调用的事件。
Objective-C
[self.datePicker addTarget:self action:@selector(datePickedValueChanged:)
forControlEvents:UIControlEventValueChanged];
Swift
self.datePicker.addTarget(self, action: Selector("datePickedValueChanged:"), forControlEvents: UIControlEvents.ValueChanged)
然后,如果值 selected 超出了允许的 selection,您可以将 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
}
}
Swift
func datePickedValueChanged (sender: UIDatePicker) {
if (self.datePicker.countDownDuration > 5400) { //5400 seconds = 1h30min
self.datePicker.countDownDuration = 60.0; //Defaults to 1 minute
}
}
-- 之前的回答:
我在日期或日期和时间模式下使用 UIDatePicker
将之前的答案留给其他人,如果这可以帮助某些人
您可以设置 UIDatePicker
的最小和最大日期。
这里用户不能select现在时间之前的时间,只能提前1小时30分钟。
任何 select 另一个时间的尝试都会使 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];
您可以使用 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];
}
抱歉,我无法继续详细介绍,我需要回家..
但希望这对您有所帮助..干杯!
虽然 Niko 的解决方案有效,但缺点是小时数仍然很大。如果您想实际限制显示的时间,我为此目的构建了一个自定义选择器。它是 UIPickerView
的子类,它在 countDownTimer 模式下复制了 UIDatePicker 的功能,同时添加了对设置 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
};
根据麻省理工学院许可,GitHub 可用。博客 post here.