日期选取器仅在单击文本字段后才起作用

时间:2017-02-23 02:14:09

标签: swift uidatepicker

我有一个日期选择器,用于设置文本字段的值。它工作得很好,只是它只在我第二次点击文本字段时工作,也就是说,我第一次点击文本字段时它会显示标准键盘。然后,如果我点击文本字段并返回到它,它会显示日期选择器。我尝试了不同的变体,但它要么根本不起作用,要么我得到同样的问题。我就是这样设置的:

class ExpDateTableViewCell: UITableViewCell, UITextFieldDelegate {


@IBOutlet weak var textField: UITextField!


@IBAction func textFieldEditing(sender: UITextField) {

    let datePickerView:UIDatePicker! = UIDatePicker()

    datePickerView.datePickerMode = UIDatePickerMode.date

    sender.inputView = datePickerView

    datePickerView.addTarget(self, action: #selector(ExpDateTableViewCell.datePickerValueChanged), for: UIControlEvents.valueChanged)
}

func datePickerValueChanged(sender:UIDatePicker) {

    let dateFormatter = DateFormatter()

    dateFormatter.dateStyle = DateFormatter.Style.medium

    dateFormatter.timeStyle = DateFormatter.Style.none
    textField.text = dateFormatter.string(from: sender.date)


}


override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
}

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
}

}

1 个答案:

答案 0 :(得分:1)

问题是这段代码:

@IBAction func textFieldEditing(sender: UITextField) {
    // ...
    sender.inputView = datePickerView
}

在我们第一次开始编辑之后 之前,您没有将文本字段inputView设置到选择器视图。因此,我们得到您正确描述的效果:我们编辑的第二时间,选择器视图存在。

您需要更早地设置文本字段inputView,例如在awakeFromNib之前用户有机会编辑文本字段第一次。