日期选择器仅在单击文本字段外后才有效
Date Picker Only Works After Clicking out of Text Field
我有一个日期选择器,用于设置文本字段的值。它工作得很好,除了它只在我第二次点击文本字段时起作用,也就是说,当我第一次点击文本字段时,它会显示标准键盘。然后,如果我点击文本字段并返回它,它会显示日期选择器。我已经尝试了它的不同变体,但它要么根本不起作用,要么我遇到了同样的问题。我是这样设置的:
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
}
}
问题是这段代码:
@IBAction func textFieldEditing(sender: UITextField) {
// ...
sender.inputView = datePickerView
}
在我们第一次开始编辑 之后,您才将文本字段的 inputView
设置为选择器视图。因此我们得到了您正确描述的效果:我们编辑的 秒 时间,选择器视图出现。
您需要更早地设置文本字段的 inputView
,例如在 awakeFromNib
、 之前 用户有机会编辑文本字段第一次。
首先将 UIDatepickerview 作为文本字段的输入视图
在文本字段操作中添加此代码
@IBAction func textFieldEditing(sender: UITextField) {
let datePickerView:UIDatePicker = UIDatePicker()
datePickerView.datePickerMode = UIDatePickerMode.Date
sender.inputView = datePickerView
datePickerView.addTarget(self, action: #selector(ViewController.datePickerValueChanged), forControlEvents: UIControlEvents.ValueChanged)
}
我有一个日期选择器,用于设置文本字段的值。它工作得很好,除了它只在我第二次点击文本字段时起作用,也就是说,当我第一次点击文本字段时,它会显示标准键盘。然后,如果我点击文本字段并返回它,它会显示日期选择器。我已经尝试了它的不同变体,但它要么根本不起作用,要么我遇到了同样的问题。我是这样设置的:
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
}
}
问题是这段代码:
@IBAction func textFieldEditing(sender: UITextField) {
// ...
sender.inputView = datePickerView
}
在我们第一次开始编辑 之后,您才将文本字段的 inputView
设置为选择器视图。因此我们得到了您正确描述的效果:我们编辑的 秒 时间,选择器视图出现。
您需要更早地设置文本字段的 inputView
,例如在 awakeFromNib
、 之前 用户有机会编辑文本字段第一次。
首先将 UIDatepickerview 作为文本字段的输入视图
在文本字段操作中添加此代码
@IBAction func textFieldEditing(sender: UITextField) {
let datePickerView:UIDatePicker = UIDatePicker()
datePickerView.datePickerMode = UIDatePickerMode.Date
sender.inputView = datePickerView
datePickerView.addTarget(self, action: #selector(ViewController.datePickerValueChanged), forControlEvents: UIControlEvents.ValueChanged)
}