UIDatePicker avec un intervalle de 15m mais toujours l'heure exacte comme valeur de return

J'ai un UIDatePicker en mode Time avec un intervalle de 15 minutes.

Disons qu'il est 19h22. La valeur que le sélecteur de date affiche par défaut est l'heure actuelle arrondie à la valeur supérieure / inférieure suivante, dans ce cas, il est 19h15. Si l'user interagit avec le sélecteur de date, la valeur affichée correspond également à la valeur renvoyée. Cependant, s'il n'y a pas eu d'interaction de l'user et que je reçois l'heure avec [UIDatePicker date] la valeur de return est l'heure exacte, c'est-à-dire 7:22 pour coller avec l'exemple. Est-il possible d'get toujours la valeur qui est réellement affichée sur le sélecteur de date au lieu de l'heure courante non arrondie, même si l'user n'a pas explicitement choisi une valeur? J'ai déjà essayé de définir le sélecteur manuellement avec [UIDatePicker setDate:[NSDate date]] mais cela ne change pas le comportement.

Des indices? Merci d'avance!

Ce n'est pas une solution parfaite mais ça marche pour moi. Je l'ai pris d'un autre post et l'ai modifié pour accepter différentes valeurs.

 - (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]; } 

Donnez-lui une date d'input et une valeur de minute (provenant de l'UIDatePicker.minuteInterval dans le cas de ce thread) et il returnnera un time fixé à cet intervalle que vous pouvez envoyer au sélecteur.

J'ai modifié la réponse de @ ima747 pour Swift 3/4 et comme extension de 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) } }