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
Dies ist die richtige Lösung. –
Ich habe das in der .m oder der .h-Datei? – KevLaBoomQc
Sie setzen das in die .m-Datei und rufen dann '[self initializeTextFieldInputView];' 'in Ihrer' viewDidLoad'-Methode auf. – Chris