2017-11-28 6 views
0

Ich habe zwei Textfelder, die ich mal eingeben möchte. Ich habe eines der Textfelder zu arbeiten, so dass die inputView eine Datumsauswahl ist, aber ich kann nicht herausfinden, ob es eine einfache Möglichkeit gibt, meinen Code zu ändern, so dass das andere Textfeld auch eine Datumsauswahl haben würde das Eingabefeld.Zwei Textfeld mit gleicher Datumsauswahl

Hier ist mein Code:

func createDatePicker(){ 
    let toolbar = UIToolbar() 
    toolbar.sizeToFit() 

    //done button 
    let done = UIBarButtonItem(barButtonSystemItem:.done, target: nil, action: #selector(donePressed)) 
    toolbar.setItems([done], animated: false) 

    fromTextField.inputAccessoryView = toolbar 
    fromTextField.inputView = picker 


    picker.datePickerMode = .time 
    picker.minuteInterval = 15 

} 
@objc func donePressed(){ 
    let formatter = DateFormatter() 
    formatter.dateStyle = .none 
    formatter.timeStyle = .short 
    let dateString = formatter.string(from: picker.date) 

    fromTextField.text = "\(dateString)" 
    self.view.endEditing(true) 

} 

Was wäre der beste Weg, um diesen Code Arbeit für eine toTextField zu machen neben nur eine Kopie dieser beiden Funktionen zu machen?

+1

führen Sie Tags für Textfeld und Objekt der jeweiligen Textfeld passieren in dieser Funktion verwenden können. – PiyushRathi

+0

hallo warum nicht datepicker Fragment verwenden, wo Sie Textfeld übergeben können –

Antwort

0

können Sie tun:

func createDatePicker(forField field : UITextField){ 
    let toolbar = UIToolbar() 
    toolbar.sizeToFit() 

    //done button 
    let done = UIBarButtonItem(barButtonSystemItem:.done, target: nil, action: #selector(donePressed)) 
    toolbar.setItems([done], animated: false) 

    field.inputAccessoryView = toolbar 
    field.inputView = picker 


    picker.datePickerMode = .time 
    picker.minuteInterval = 15 

} 

//later 
self.createDatePicker(forField: fromTextField) 
self.createDatePicker(forField: toTextField) 
+0

Für Funktion donepressed, kann es nicht mit einer Feldvariablen auch aufgerufen werden? Ich erhalte diesen Fehler: "Argument von '#selector' verweist nicht auf eine '@objc' -Methode, Eigenschaft oder Initialisierer", wenn ich versuche, donePressed (forField: field) aufzurufen – user3628240

0

Für die Schaffung von zwei Textfelder gleiche picker, wie inputView @ CZ54 Antwort korrekt ist, dh

func createDatePicker(forField field : UITextField){ 
    let toolbar = UIToolbar() 
    toolbar.sizeToFit() 

    //done button 
    let done = UIBarButtonItem(barButtonSystemItem:.done, target: nil, action: #selector(donePressed)) 
    toolbar.setItems([done], animated: false) 

    field.inputAccessoryView = toolbar 
    field.inputView = picker 


    picker.datePickerMode = .time 
    picker.minuteInterval = 15 

} 

//later 
self.createDatePicker(forField: fromTextField) 
self.createDatePicker(forField: toTextField) 

und Daten von picker zu holen gemäß dem aktiven Textfield Sie haben schaffen sie eine Variable vom Typ UITextField und weist, wie folgend:

var activeTextField: UITextField! 

func textFieldDidBeginEditing(_ textField: UITextField) { 
    activeTextField = textField 
} 

Und wenn Zeile in picker gewählt werden würde, indem Sie könnten Sie relevanten Aktionen

if activeTextField == fromTextField { 
    //action 
} else if activeTextField == toTextField { 
    //action 
} 
Verwandte Themen