UIDatePicker,间隔为15米,但始终为返回值

Tig*_*rry 17 xcode objective-c uidatepicker ios

我在时间模式下有一个UIDatePicker,间隔为15分钟.

我们说是晚上7:22.日期选择器默认显示的值是四舍五入到下一个更高/更低值的当前时间,在这种情况下,它是下午7:15.如果用户与日期选择器交互,则显示的值也是返回的值.但是,如果没有任何用户交互,我得到的时间与[UIDatePicker date]返回值是确切的当前时间,即坚持示例7:22.有没有办法总是获得实际显示在日期选择器上的值而不是当前的未连接时间,即使用户没有明确选择值?我已经尝试手动设置选择器,[UIDatePicker setDate:[NSDate date]]但这不会改变行为.

任何提示?提前致谢!

aas*_*att 19

我修改了@ ima747对Swift 3/4的回答以及作为.的扩展UIDatePicker.picker.clampedDate

extension UIDatePicker {
    /// Returns the date that reflects the displayed date clamped to the `minuteInterval` of the picker.
    /// - note: Adapted from [ima747's](http://stackoverflow.com/users/463183/ima747) answer on [Stack Overflow](http://stackoverflow.com/questions/7504060/uidatepicker-with-15m-interval-but-always-exact-time-as-return-value/42263214#42263214})
    public var clampedDate: Date {
        let referenceTimeInterval = self.date.timeIntervalSinceReferenceDate
        let remainingSeconds = referenceTimeInterval.truncatingRemainder(dividingBy: TimeInterval(minuteInterval*60))
        let timeRoundedToInterval = referenceTimeInterval - remainingSeconds
        return Date(timeIntervalSinceReferenceDate: timeRoundedToInterval)
    }
}
Run Code Online (Sandbox Code Playgroud)


ima*_*747 12

这不是一个完美的解决方案,但它适用于我.我从另一篇文章中获取并修改它以接受不同的值.

- (NSDate*)clampDate:(NSDate *)dt toMinutes:(int)minutes {
int referenceTimeInterval = (int)[dt timeIntervalSinceReferenceDate];
int remainingSeconds = referenceTimeInterval % (minutes*60);
int timeRoundedTo5Minutes = referenceTimeInterval - remainingSeconds; 
if(remainingSeconds>((minutes*60)/2)) {/// round up
    timeRoundedTo5Minutes = referenceTimeInterval +((minutes*60)-remainingSeconds);            
}
 return [NSDate dateWithTimeIntervalSinceReferenceDate:(NSTimeInterval)timeRoundedTo5Minutes];
}
Run Code Online (Sandbox Code Playgroud)

输入一个输入日期和分钟值(在此线程的情况下取自UIDatePicker.minuteInterval),它将返回一个时间限制到该间隔,您可以将其提供给选择器.