从文本框日期选择器设置当前日期(Set current date from datepicker o

2019-09-27 08:20发布

我设置一个文本框一个datepicker。 对于这是我写的..(在viewDidLoad

    let datePicker = UIDatePicker()
    datePicker.datePickerMode = UIDatePickerMode.date
    datePicker.addTarget(self, action: #selector(AddDetailsViewController.theDatePickerValueChanged(sender:)), for: .valueChanged)
    dateTimeTextfield.inputView = datePicker

viewDidLoad我具备的功能theDatePickerValueChanged给出这样的...

@objc func theDatePickerValueChanged(sender: UIDatePicker) {
    let formatter = DateFormatter()
    formatter.dateStyle = .medium
    formatter.timeStyle = .medium
    dateTimeTextfield.text = formatter.string(from: sender.date)
}

但现在发生的事情是,当我在文本框敲击一下,日期选择器上来。 但是,如果我想在当前日期的文本框进行设置,然后我不得不从在日期选择器的当前日期向前或向后移动,然后再返回到当前日期。

但我想是当日期选择器出现,它当前的日期,应直接在文本框设置,而不需要我从当前日期向前或向后。 我怎样才能做到这一点...?

Answer 1:

您可以实现文本字段的委托方法textFieldShouldBeginEditing:在该委托方法,你需要做的是这样的...

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {

  if dateTimeTextfield.text!.isEmpty {
    let formatter = DateFormatter()
    formatter.dateStyle = .medium
    formatter.timeStyle = .medium
    dateTimeTextfield.text = formatter.string(from: Date())
  }
  return true
}

不要忘了设置dateTimeTextfield.delegate = self



Answer 2:

设置UITextFieldDelegate和使用textFieldDidBeginEditing

//Set delegate
dateTimeTextfield.delegate = self


// UITextFieldDelegate method
func textFieldDidBeginEditing(_ textField: UITextField) -> void {

  if textField.text == nil || textField.text!.isEmpty {
    let formatter = DateFormatter()
    formatter.dateStyle = .medium
    formatter.timeStyle = .medium
    textField.text = formatter.string(from: Date())
  }

}


Answer 3:

实现UITextFieldDelegate方法textFieldShouldBeginEditing和调用函数theDatePickerValueChanged象下面这样:

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {

    if dateTimeTextfield.text!.isEmpty {
        theDatePickerValueChanged(sender: UIDatePicker())
    }
    return true
}

设置dateTimeTextfield.delegate = selfviewDidLoad



文章来源: Set current date from datepicker on textfield