我的UIDatePicker有2个问题:


我必须在UITextField上点击2次才能出现UIDatePicker
当我连续选择某项(例如一天)时,UIDatePicker紧随其后关闭,我认为最好将其阻止并设置一个“完成”按钮


码:

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

@IBAction func tfDateNaissanceEditing(sender: UITextField) {
    let datePickerView:UIDatePicker = UIDatePicker()

    datePickerView.datePickerMode = UIDatePickerMode.Date

    sender.inputView = datePickerView

    datePickerView.addTarget(self, action: Selector("datePickerValueChanged:"), forControlEvents: UIControlEvents.ValueChanged)
    tfDateNaissance.resignFirstResponder()

}

func datePickerValueChanged(sender: UIDatePicker) {
    let dateFormatter = NSDateFormatter()

    dateFormatter.dateStyle = NSDateFormatterStyle.MediumStyle

    dateFormatter.timeStyle = NSDateFormatterStyle.NoStyle

    tfDateNaissance.text = dateFormatter.stringFromDate(sender.date)
    tfDateNaissance.resignFirstResponder()
}

最佳答案

又是我。

对于Q1,您正在监听tfDateNaissanceEditing函数的事件是什么?
tfDateNaissance.resignFirstResponder()的目的是什么?我猜发生了什么事,您在听startEditing事件。因此,日期选择器在您第一次触摸时便被设置为输入视图,并在最后一行代码中立即被调用。

从理论上讲,只要在viewDidLoad中添加以下代码,就可以实现所需的功能

...
// your other functions

let datePickerView : UIDatePicker = UIDatePicker()
datePickerView.datePickerMode = UIDatePickerMode.Date
UITextField.inputView = datePickerView

datePickerView.addTarget(self, action: Selector("datePickerValueChanged:"), forControlEvents: UIControlEvents.ValueChanged)


Q2。当前,每次DatePicker的值更改时,它都会自行退出,因此在tfDateNaissance.resignFirstResponder()函数中删除datePickerValueChanged可以解决此问题。如果要使用带有“完成”按钮的自定义工具栏,则可以在viewDidLoad中手动创建一个并将其设置为输入附件视图。您也可以使用this answer之类的导航栏来实现此目的

顺便说一句,此问题不需要didReceiveMemoryWarning函数。

关于ios - UITextField和UIDatePicker,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34431942/

10-11 06:01