Сохранить выбор из UIDatePicker

Так что у меня есть UIDatePicker в Xcode. Мне нужен способ, чтобы UIdatePicker сохранялся автоматически. Чтобы в следующий раз, когда этот пользователь открыл приложение, UIDatePicker отображал ту же дату, которая была введена до его закрытия в последний раз. Вот часть моего кода

@IBOutlet weak var BirthdayPicker: UIDatePicker!
...
 override func viewDidLoad() {
    super.viewDidLoad()

    //__________________________________________________________________________
    // This makes sure the user doesnt use a date after the current date
    var components = DateComponents()
    components.year = -300

    let minDate = Calendar.current.date(byAdding: components, to: Date())

    components.year = 0
    components.day = 0
    components.hour = 0
    components.minute = 0
    components.second = 0
    let maxDate = Calendar.current.date(byAdding: components, to: Date())

    BirthdayPicker.minimumDate = minDate
    BirthdayPicker.maximumDate = maxDate
    //____________________________________

Поэтому, когда я открываю свое приложение, я получаю сегодняшнюю дату. вот скриншот Это сегодняшняя дата

Но то, что я действительно хочу, когда я открываю приложение,

Это случайная дата, которую я просто установил

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

1 ответ

Решение

UIDatePicker имеет свойство date который представляет текущий Date выбрано в поле выбора даты. Ваша цель должна сохранить эту дату где-нибудь. UserDefaults должно быть достаточно для этого случая.

Начните с создания IBAction для вашего выбора даты для события .valueChanged и когда значение будет изменено, сохраните текущую дату вашего выбора в UserDefaults.standard с ключом "BirthdayDate"

@IBAction func datePickerChangedValue(_ sender: UIDatePicker) {
    UserDefaults.standard.set(sender.date, forKey: "BirthdayDate")
}

затем в viewDidLoad если уже есть сохраненная дата для ключа BirthdayDateустановить текущую дату BirthdayPicker

if let date = UserDefaults.standard.object(forKey: "BirthdayDate") as? Date {
    BirthdayPicker.date = date
}

override func viewDidLoad() {
    super.viewDidLoad()
    ...
    var components = DateComponents()
    components.year = -300
    let minDate = Calendar.current.date(byAdding: components, to: Date())
    BirthdayPicker.minimumDate = minDate
    BirthdayPicker.maximumDate = Date() // if `maxDate` is just current date, you can use `Date()`

    if let date = UserDefaults.standard.object(forKey: "BirthdayDate") as? Date {
        BirthdayPicker.date = date
    }
}

@IBAction func datePickerChangedValue(_ sender: UIDatePicker) {
    UserDefaults.standard.set(sender.date, forKey: "BirthdayDate")
}
Другие вопросы по тегам