Chciałbym moje pole tekstowe „DateText”, aby otworzyć datepicker (rok - miesiąc - dzień) z tego typu wartość:Wymień iOS7 klawiatury przez Date Picker w TableViewController
YYYY-MM-DD
Czy istnieje prosty sposób zmienić klawiaturę?
Chciałbym moje pole tekstowe „DateText”, aby otworzyć datepicker (rok - miesiąc - dzień) z tego typu wartość:Wymień iOS7 klawiatury przez Date Picker w TableViewController
YYYY-MM-DD
Czy istnieje prosty sposób zmienić klawiaturę?
można „wymienić” na klawiaturze za pomocą właściwości inputView z UITextField:
- (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 nie masz delegata takiego UIPickerViews tak dlatego należy dodać działanie, jak gdyby to była UIButton . :
na końcu deklaracji selektora udostępnia UIDatePicker jako udogodnienie, aby uzyskać datę, kiedy została zmieniona. Jeśli nie chcesz wysłać przedmiot w tej metodzie można uzyskać UIDatePicker przez odwołanie do UITextField za inputView:
UIDatePicker *datePicker = (UIDatePicker *)self.textField.inputView;
Wreszcie podczas ustawiania formatów za pomocą NSDateFormatter jest dobra praktyka, aby utworzyć jedną metodę powrotu jest NSDateFormatter obiekt, aby upewnić się, że format jest spójny. Najpierw utwórz stałą/makro w swoim projekcie, które deklaruje ciąg formatu.
EDIT
Jak poproszony przez Pavan w wątku komentarzach, jeśli chcesz dodać zrobione przycisk powyżej klawiatury, użyj 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
Wydaje się, że ta odpowiedź jest dość nieaktualna. Dodawanie realizację z Swift 3:
@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)
}
Można również uzyskać UIDatePicker oddając inputView
w UITextField:
let datePicker = self.textField.inputView as? UIDatePicker
Włącz UIDatePicker użyciu Montaż zaczęła działanie podczas tworzenia działań TextField.
- (IBAction)textFieldAction:(id)sender
{
// Place your code for UIDatePicker
[textField resignFirstResponder]; //add this line in the end.
}
Swift 2,0
znalazłem odpowiedź Chrisa powyżej pomocne, ale potrzebował go w 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)
To jest prawidłowe rozwiązanie. –
Umieściłem to w pliku .m lub .h? – KevLaBoomQc
Umieszczasz to w pliku .m, a następnie wywołujesz "[self initializeTextFieldInputView];" w swojej metodzie 'viewDidLoad'. – Chris