Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从文本字段上的日期选择器设置当前日期_Ios_Swift_Uidatepicker - Fatal编程技术网

Ios 从文本字段上的日期选择器设置当前日期

Ios 从文本字段上的日期选择器设置当前日期,ios,swift,uidatepicker,Ios,Swift,Uidatepicker,我正在文本字段上设置日期选择器。这就是我写的….(在viewDidLoad中) 在外部viewDidLoad我有一个函数DatePickerValueChanged如下所示 @objc func theDatePickerValueChanged(sender: UIDatePicker) { let formatter = DateFormatter() formatter.dateStyle = .medium formatter.timeStyle = .mediu

我正在文本字段上设置日期选择器。这就是我写的….(在
viewDidLoad
中)

在外部
viewDidLoad
我有一个函数
DatePickerValueChanged
如下所示

@objc func theDatePickerValueChanged(sender: UIDatePicker) {
    let formatter = DateFormatter()
    formatter.dateStyle = .medium
    formatter.timeStyle = .medium
    dateTimeTextfield.text = formatter.string(from: sender.date)
}
但是现在当我点击文本字段时,日期选择器出现了。但是如果我想在文本字段上设置当前日期,那么我必须在日期选择器上从当前日期向前或向后移动,然后再次返回到当前日期


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

您可以实现文本字段委托方法
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

实现
uitextfield委托
方法
textfield应开始编辑
并调用函数
更改的日期选择器值
,如下所示:

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

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

viewDidLoad
中设置
dateTimeTextfield.delegate=self
,设置UITextFieldDelegate并使用
textfieldDiBeginediting

    let datePicker = UIDatePicker()
    datePicker.datePickerMode = UIDatePickerMode.date
    datePicker.addTarget(self, action: #selector(AddDetailsViewController.theDatePickerValueChanged(sender:)), for: .valueChanged)
    dateTimeTextfield.inputView = datePicker
//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())
  }

}

很高兴听到我能帮忙。当然可以@Krunal。已经向所有人投了赞成票。谢谢大家:)@bwv是的,但您可以只查看代码。简短的回答:)