Установите максимальное время UIDatePicker в режиме countDownTimer - PullRequest
0 голосов
/ 09 мая 2020

Я новичок в Swift, и я пытаюсь использовать средство выбора для выбора частоты уведомлений. Я хочу установить максимальное количество, которое может выбрать пользователь, равным 2 часам, но то, что я делаю, не работает, кто-нибудь знает, возможно ли это?

Вот что я сделал:

let minutePicker = UIDatePicker()
minutePicker.datePickerMode = .countDownTimer
minutePicker.minuteInterval = 10 //sets the interval of minutes.
minutePicker.countDownDuration = 30*60 //set starting value.
minutePicker.maximumDate = Date(timeInterval: 60*60*2, since: Date())

1 Ответ

0 голосов
/ 09 мая 2020

Вы можете сделать что-то вроде этого:

   let minutePicker = UIDatePicker()
    minutePicker.datePickerMode = .countDownTimer
    minutePicker.addTarget(self, action: #selector(respondToChanges(picker:)), for: .valueChanged)
    minutePicker.minuteInterval = 10

    var components = DateComponents()
    components.minute = 30
    let date = Calendar.current.date(from: components)!
    minutePicker.setDate(date, animated: true)

Затем вам нужно создать метод responseToChanges. Возможная реализация будет выглядеть так:

@objc
func respondToChanges(picker: UIDatePicker) {
    if (picker.countDownDuration > 7200) { //countDownDuration has to be in seconds
        var components = DateComponents()
        components.hour = 2
        let date = Calendar.current.date(from: components)!
        picker.setDate(date, animated: true)
    }
}

В документации сказано: «Минимальная и максимальная даты игнорируются в режиме таймера обратного отсчета». Итак, с моим решением вы вручную устанавливаете время обратно на 2 часа, каждый раз, когда пользователь выбирает более 2 часов.

...