/ / SWIFT 2.2 ORA minima e massima in DatePicker - rapido, datapicker, ora

SWIFT 2.2 ORE minime e massime in DatePicker - swift, datepicker, ora

Sto cercando di impostare l'ora massima e minima nel mio Datepicker. Sono riuscito a impostare il minimo, ma non riesco a risolvere il massimo. Ecco cosa ho finora:

    let startHour: Int = 8
let endHour: Int = 22
let date1: NSDate = NSDate()
let gregorian: NSCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
let components: NSDateComponents = gregorian.components(([.Day, .Month, .Year, .Hour, .Minute]), fromDate: date1)

if components.hour >= 22 && components.hour < 8 {
components.hour = startHour
components.minute = 0
components.second = 0
}

let startDate: NSDate = gregorian.dateFromComponents(components)!

components.hour = endHour
components.minute = 0

let endDate: NSDate = gregorian.dateFromComponents(components)!

picker.datePickerMode = .DateAndTime
picker.minimumDate = startDate
picker.maximumDate = endDate
picker.setDate(startDate, animated: true)

C'è un modo per ignorare il giorno e il mese attuali inmetodo .ma maximumDate (che ora è la mia data attuale)? Riporta la mia data futura selezionata alla data corrente e controllando solo l'intervallo di ore che è impostato su 8: 00-22: 00. Voglio che DatePicker abiliti gli orari di prelievo dalle 8 alle 22 per ogni giorno futuro, non solo per il giorno corrente.

risposte:

2 per risposta № 1

Rimuovere picker.maximumDate = endDate e scrivi il tuo metodo di convalida personalizzato.

// Call datePickerChanged method when the picker finishes rotating
picker.addTarget(self, action: #selector(datePickerChanged(_:)), forControlEvents: .ValueChanged)

func datePickerChanged(picker: UIDatePicker) {
let selectedDate = picker.date
// 1) if selectedDate"s hour > than your endHour (10pm)
// 2) create yourNewDate with endHour = 10pm
// 3) set new date with animation
picker.setDate(yourNewDate, animated: true)
}