从 UIDatePicker 保存选择

Save a selection from an UIDatePicker

所以我在 Xcode 中有一个 UIDatePicker。我需要一种方法来自动保存 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
    //____________________________________

所以每当我打开我的应用程序时,我都会得到今天的日期。这是截图This is the todays date

但我打开应用后真正想要的是

This is a random date that I just set it to

如果你想让我说得更具体一点或者对我有任何问题,请发表评论。我也不确定我的代码是否有用,但确实有用。谢谢。

UIDatePicker 有 属性 date,代表当前在日期选择器中选择的 Date。您的目标应该是将此日期保存在某个地方。 UserDefaults 对于这种情况应该足够了。

开始为事件 .valueChanged 的日期选择器创建 IBAction,当值更改时,使用键 "BirthdayDate"[将选择器的当前日期保存到 UserDefaults.standard

@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")
}