出现"done"按钮时遇到问题,该按钮关闭了来自UITextField的日期PickerView



我有一个UITextField,它当前正在正确显示DatePickerView。我试着四处寻找如何添加done按钮,但我找不到它工作或注册关闭DatePicker的方法。

以下是当有人点击UITextField:时显示DatePicker的功能

@IBAction func selectDate(_ sender: UITextField) {
let datePickerView:UIDatePicker = UIDatePicker()
datePickerView.datePickerMode = UIDatePickerMode.date
sender.inputView = datePickerView
datePickerView.addTarget(self, action: #selector(self.datePickerValueChanged), for: UIControlEvents.valueChanged)
}

这里有一个功能可以跟踪任何变化并将其显示在UITextField

func datePickerValueChanged(sender:UIDatePicker) {
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = DateFormatter.Style.short
dateFormatter.timeStyle = DateFormatter.Style.none
birthday.text = dateFormatter.string(from: sender.date)
}

如何在这个特定的代码中添加一个按钮来关闭DatePicker

override func viewDidLoad() {
super.viewDidLoad()
let toolbar = UIToolbar(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 30))
let space = UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: nil, action: nil)
let doneButton = UIBarButtonItem(title: “Done”, style: .Done, target: self, action: Selector(“doneButtonAction”))
var buttons = [UIBarButtonItem]()
buttons.append(space)
buttons.append(doneButton)
toolbar.setItems(buttons, animated: false)
toolbar.sizeToFit()

self.datePickerView.inputAccessoryView = toolbar
}
func doneButtonAction(){
self.view.endEditing(true)
}

另一种方法是,在datePickerValueChanged事件中,首先关闭键盘,然后隐藏UIDatePicker

func datePickerValueChanged(sender:UIDatePicker) {
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = DateFormatter.Style.short
dateFormatter.timeStyle = DateFormatter.Style.none
birthday.text = dateFormatter.string(from: sender.date)
self.view.endEditing(true) // Hide keyboard
}

您也可以使用它。

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.view.endEditing(true)
}

通过使用此按钮,您不需要任何完成按钮
它将通过点击外部退出您的textField或textView。
注意:它不会影响滚动视图。

添加以下两个操作,并在viewDidLoad函数中添加代码。

override func viewDidLoad() {
super.viewDidLoad()
datePickerView = UIDatePicker()
datePickerView!.datePickerMode = .Date
txtxt.inputView = datePickerView
datePickerView!.addTarget(self, action: Selector("handleDatePicker:"), forControlEvents: UIControlEvents.ValueChanged)
let toolBar = UIToolbar(frame: CGRect(x: CGFloat(0), y: CGFloat(0), width: CGFloat(self.view.frame.size.width), height: CGFloat(44)))
toolBar.tintColor = UIColor.grayColor()
let doneBtn = UIBarButtonItem(title: "Done", style: .Bordered, target: self, action:"ShowSelectedDate")
let space = UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: nil, action: nil)
toolBar.items = [space, doneBtn]
txtxt.inputAccessoryView = toolBar
// Do any additional setup after loading the view, typically from a nib.
}
func ShowSelectedDate(){
self.view.endEditing(true)
}
func handleDatePicker(sender: UIDatePicker) {
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
txtxt.text = dateFormatter.stringFromDate(sender.date)
}

最新更新