2014-07-03 5 views
15

Ho un campo di testo e quando è selezionato appare un datepicker al posto di una tastiera, ma si aggiorna solo con la data odierna la prima volta. L'utente cambia la data, ma il campo di testo non continua ad aggiornarsi. Qual è il problema?Swift: usando UIDatePicker come UITextField inputView non aggiorna

Questo è come io chiamo il Datepicker e controllare la data viene immessa nel mio campo di testo:

@IBAction func dp(sender: UITextField) { 
    var DatePickerView : UIDatePicker = UIDatePicker() 
    DatePickerView.datePickerMode = UIDatePickerMode.Date 
    textfieldjobdate.inputView = DatePickerView 
    DatePickerView.addTarget(self, action: Selector("handleDatePicker"), forControlEvents: UIControlEvents.ValueChanged)  
} 

func handleDatePicker() { 
    var DatePickerView : UIDatePicker = UIDatePicker() 
    var dateFormatter = NSDateFormatter() 
    dateFormatter.dateFormat = "dd MMM yyyy" 
    textfieldjobdate.text = dateFormatter.stringFromDate(DatePickerView.date) 
} 
+0

Vedi questo è semplice codice con demo: https://iosdevcenters.blogspot.com/2016 /03/ios9-uidatepicker-example-with.html –

risposta

41

Il tuo metodo handleDatePicker è istanziare un nuovo DatePicker ogni volta che viene chiamato. È necessario aggiungere un parametro alla funzione di passare al mittente (il DatePicker creato nel func dp)

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

func handleDatePicker(sender: UIDatePicker) { 
    let dateFormatter = DateFormatter() 
    dateFormatter.dateFormat = "dd MMM yyyy" 
    textfieldjobdate.text = dateFormatter.string(from: sender.date) 
} 
+0

Grazie per la risposta, ma non sono stato in grado di applicare - si blocca solo il programma. Inoltre ho dovuto cambiare DatePicker in UIDatePicker, ma non funziona - mi spiace. – agf119105

+0

L'errore che genera è "selettore non riconosciuto" devo modificare func dp? – agf119105

+0

Sì, devi usare il selettore corretto per 'handleDatePicker:' in questo momento prende un parametro. –

0
let selectedDate = datePicker.date 
    print(selectedDate) 
    let formatter = DateFormatter() 
    formatter.dateFormat = "dd/MM/yyyy" 
    let strDate = formatter.string(from: selectedDate) 
    self.labelDate.text = strDate 
+0

Sebbene lo snippet di codice possa risolvere il problema, dovresti descrivere qual è lo scopo del tuo codice (come risolve il problema). Inoltre, potresti voler controllare https://stackoverflow.com/help/how-to-answer –