UIDatePicker不打印日期

时间:2015-01-16 14:08:35

标签: ios swift xcode6 uidatepicker

我在我的应用中实现了一个UIDatePicker。如果我在弹出日期选择器后更改默认日期,则日期选择器会返回有效日期。但是,如果我想选择当前日期(我不必更改日期选择器),日期选择器不会给出日期。有人在Swift中知道这个解决方案吗?

    //Date Picker config.

func datePickerChanged(datePicker:UIDatePicker) {

    var dateFormatter = NSDateFormatter()

    dateFormatter.dateStyle = NSDateFormatterStyle.MediumStyle

    var strDate = dateFormatter.stringFromDate(datePicker.date)
    dateLabel.text = strDate
}

2 个答案:

答案 0 :(得分:0)

如果您在代码中设置了UIDatePicker的日期,则它不会运行valueChanged事件。您必须将日期字符串更新提取到单独的方法中并直接更新。

另外,请勿将UIDatePicker视为唯一的日期值来源。保持模型分开。

var date = NSDate()

func datePickerChanged(datePicker:UIDatePicker) {
  self.date = datePicker.date
  self.updateDateStringWithDate(self.date)
}

func resetDate() {
  self.date = NSDate()
  self.datePicker.date = self.date
  self.updateDateStringWithDate(self.date)
}

func updateDateStringWithDate(date: NSDate) {
  var dateFormatter = UIDateFormatter()
  dateFormatter.dateStyle = NSDateFormatterStyle.MediumStyle

  var strDate = dateFormatter.stringFromDate(date)
  dateLabel.text = strDate
}

另外作为旁注,不要在每次需要时创建新的UIDateFormatter,因为它的初始化相对昂贵。

答案 1 :(得分:0)

当您更改日期(valueChanged)时,您会收到回调。因此,如果您在不更改日期的情况下解雇选择器,则无法获得此信息。

您必须知道提交日期选择器之前的日期,以防您未设置日期,或者如果您要处理它,则需要取消选择。


创建一个var (我通常称之为 now ,其中存储currentDate(NSDate())并将其设置为{{ 1}} date的属性,因此您知道自从显示默认的datePicker日期以来提交选择器的日期。