2014-04-22 4 views

Antwort

31

Sie können „ersetzen“, um die Tastatur durch die inputView Eigenschaft des UITextField mit:

- (void) initializeTextFieldInputView { 
    UIDatePicker *datePicker = [[UIDatePicker alloc] initWithFrame:CGRectZero]; 
    datePicker.datePickerMode = UIDatePickerModeDate; 
    [datePicker addTarget:self 
        action:@selector(dateUpdated:) 
     forControlEvents:UIControlEventValueChanged]; 
    self.textField.inputView = datePicker; 
} 

- (void) dateUpdated:(UIDatePicker *)datePicker { 
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    [formatter setDateFormat:@"yyyy-MM-dd"]; 
    self.textField.text = [formatter stringFromDate:datePicker.date]; 
} 

UIDatePickers haben keine Delegierten wie UIPickerViews damit ist, warum eine Aktion hinzugefügt werden muss, als ob es ein UIButton waren . Die : am Ende der Selektor-Deklaration bietet die UIDatePicker als eine Bequemlichkeit, um das Datum zu erhalten, wenn es geändert wurde. Wenn Sie nicht über ein Objekt in der Methode senden möchten, können Sie die UIDatePicker erhalten, indem die inputView des UITextField Referenzierung:

UIDatePicker *datePicker = (UIDatePicker *)self.textField.inputView; 

Schließlich wenn Formaten NSDateFormatter Einstellung ist eine gute Praxis ein Verfahren zu schaffen, eine NSDateFormatter zurückzukehren Objekt, um sicherzustellen, dass das Format konsistent ist. Erstellen Sie mindestens einmal in Ihrem Projekt eine Konstante/Makro, die die Formatzeichenfolge deklariert.

EDIT

Wie von Pavan im Kommentarthread gefragt, ob Sie eine fertig Taste über der Tastatur hinzufügen möchten, verwenden Sie die inputAccessoryView:

UIToolbar *toolbar = [[UIToolbar alloc] init]; 
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(doneButtonWasPressed:)]; 
UIBarButtonItem *flexibleSeparator = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 
toolbar.items = @[flexibleSeparator, doneButton]; 
self.textField.inputAccessoryView = toolbar; 

EDIT 2, SWIFT

Scheint wie diese Antwort ist ziemlich veraltet. Das Hinzufügen der Implementierung mit Swift 3:

let datePicker = self.textField.inputView as? UIDatePicker 
+0

Dies ist die richtige Lösung. –

+0

Ich habe das in der .m oder der .h-Datei? – KevLaBoomQc

+0

Sie setzen das in die .m-Datei und rufen dann '[self initializeTextFieldInputView];' 'in Ihrer' viewDidLoad'-Methode auf. – Chris

-1

UIDatePicker bearbeiten Haben mit Aktivieren Aktion Begin, während TextField- Aktion zu erstellen:

@IBOutlet weak var textField: UITextField! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.initializeTextFieldInputView() 
} 

func initializeTextFieldInputView() { 
    // Add date picker 
    let datePicker = UIDatePicker() 
    datePicker.datePickerMode = .date 
    datePicker.addTarget(self, action: #selector(dateChanged(_:)), for: .valueChanged) 
    self.textField.inputView = datePicker 

    // Add toolbar with done button on the right 
    let toolbar = UIToolbar(frame: CGRect(x: 0, y: 0, width: self.view.bounds.width, height: 1)) 
    let flexibleSeparator = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil) 
    let doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(doneButtonPressed(_:))) 
    toolbar.items = [flexibleSeparator, doneButton] 
    self.textField.inputAccessoryView = toolbar 
} 

func dateChanged(_ datePicker: UIDatePicker) { 
    let formatter = DateFormatter() 
    formatter.dateFormat = "yyyy-MM-dd" 
    self.textField.text = formatter.string(from: datePicker.date) 
} 

Sie auch die UIDatePicker von inputView Gießen in UITextField bekommen.

- (IBAction)textFieldAction:(id)sender 
{ 
    // Place your code for UIDatePicker 
    [textField resignFirstResponder]; //add this line in the end. 
} 
0

Swift 2,0

ich Chris Antwort oben hilfreich, aber brauchte es in Swift.

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Present UIDatePicker for date input 
    let datePicker = UIDatePicker(frame: CGRectZero) 
    datePicker.datePickerMode = .Date 
    datePicker.addTarget(self, action: #selector(SettingsViewController.DateChanged), forControlEvents: .ValueChanged) 
    self.fromTimeField.inputView = datePicker 
} 

func timeChanged(datePicker: UIDatePicker) { 
    let formatter = NSDateFormatter() 
    formatter.dateFormat = "yyyy-MM-dd" 
    self.fromTimeField.text = formatter.stringFromDate(datePicker.date)