保存来自 UIDatePicker 的选择

Posted

技术标签:

【中文标题】保存来自 UIDatePicker 的选择【英文标题】:Save a selection from an UIDatePicker 【发布时间】:2018-12-29 17:37:01 【问题描述】:

所以我在 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

如果您希望我更具体或对我有任何问题,请发表评论。我也不确定我的代码是否有用,但它确实有用。谢谢。

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于保存来自 UIDatePicker 的选择的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 部分中的 NSDates 不反映来自 UIDatePicker 的日期

使用 jquery-ui datepicker 的 knockoutjs 数据绑定

是否可以在 Swift 中拥有来自同一个 UITextField 的 UIPickerView 和 UIDatePicker?

UIDatePicker:无法选择默认值

UIDatePicker 选择月份和年份

ios 中pickerView城市选择和UIDatePicker生日选择