【问题标题】:iOS 6 UIDatePicker timer lets user select 0 countDownDurationiOS 6 UIDatePicker 计时器让用户选择 0 countDownDuration
【发布时间】:2012-10-24 21:51:20
【问题描述】:

我在 UIDatePickerModeCountDownTimer 中使用 UIDatePicker 来允许用户选择持续时间。

如果您将计时器间隔设置为 5 分钟,用户将能够选择 0 小时 : 0 分钟(这很糟糕;这在 iOS 5 甚至在 iOS 6 中都是不允许的,间隔为 1 分钟)。

现在我正在通过在更改时执行此操作来修复它:

-(void)timerValueChanged
{
    int clockInterval = workoutTimePicker.minuteInterval * 60;

    if (workoutTimePicker.countDownDuration < clockInterval) {
        workoutTimePicker.countDownDuration = clockInterval;
    }
}

但这会让滚轴跳起来。如何为滚筒设置动画?

【问题讨论】:

  • 我刚刚运行了一个快速测试(在 iPad 模拟器 iOS 6 上),它不允许我将倒计时设置为 0:00...您可以简单地选择它,但它会动画回 0: 01 瞬间。你用的是模拟器还是真机?
  • 啊,有一个细节很重要。您需要将时间间隔设置为 5 分钟。如果你这样做,这将在模拟器和设备中发生。 (现在编辑问题)

标签: ios uikit ios6


【解决方案1】:

目前没有setCountDownDuration:animated:,所以我们必须使用setDate:animated:

我们必须创建一个带有当前日/月/年的NSDate 对象,以便我们使用您想要的值填充分钟组件,假设它是workoutTimePicker.minuteInterval

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:[NSDate date]];
    components.hour = 0;
    components.minute = workoutTimePicker.minuteInterval; // how much minutes you want
    components.second = 0;
NSDate * resetedMinsDate = [calendar dateFromComponents:components];        

所以有了这个新日期,我们只需要设置选择器的日期:

[workoutTimePicker setDate:resetedMinsDate animated:YES];

【讨论】:

  • 谢谢!这比我想出的 hack 效果要好得多。
【解决方案2】:

在尝试Carlos Ricardo 的答案时,我发现了一个更简洁的解决方案(使用 swift):

let minDate = Calendar.current.startOfDay(for: Date()) + clockInterval
datePicker.setDate(minDate, animated: true)

【讨论】:

    猜你喜欢
    • 2013-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    相关资源
    最近更新 更多