2015-11-03 3 views
0

Я использую многоуровневые учебные пособия и ответы stackoverflow, чтобы собрать это вместе. У меня есть UITextField, который, когда пользователь щелкает, поднимает UIDatePicker (вместо клавиатуры). Как только финишер закрывается, TextField должен обновиться с выбранной датой.UIDatePicker не обновляет UITextField

Однако он имеет текущую дату/время, независимо от того, к чему вы его измените. Что мне не хватает? Я хочу, чтобы он отформатирован как MM/dd/yyyy.

- (void)viewDidLayoutSubviews { 
[super viewDidLayoutSubviews]; 

//birthday view 
UIDatePicker *datePicker = [[UIDatePicker alloc] init]; 
UIToolbar *doneBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.frame), 44)]; 

datePicker.datePickerMode = UIDatePickerModeDate; 
[datePicker addTarget:self action:@selector(updateTextField:) forControlEvents:UIControlEventValueChanged]; 
_birthdayField.inputView = datePicker; 
[_birthdayField setInputAccessoryView:doneBar]; 


[doneBar setBarStyle:UIBarStyleDefault]; 
UIBarButtonItem *spacer = [[UIBarButtonItem alloc] 
          initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace 
          target:nil 
          action:nil]; 
[doneBar setItems: [NSArray arrayWithObjects:spacer, [[UIBarButtonItem alloc] 
                 initWithTitle:@"Done" 
                 style:UIBarButtonItemStyleDone 
                 target:self 
                 action:@selector(datePickerDone:)],nil ] animated:YES]; 
} 

- (IBAction)datePickerDone:(id)sender { 
    [_birthdayField resignFirstResponder]; 
} 

-(void)updateTextField:(id)sender { 
    if([_birthdayField isFirstResponder]) { 
     UIDatePicker *picker = (UIDatePicker*)_birthdayField.inputView; 
     _birthdayField.text = [NSString stringWithFormat:@"%@", picker.date]; 
    } 
} 

Я предполагаю, что это то, что мне не хватает в updateTextField.

ответ

0

Потому что вы уходите в отставку _birthdayField, когда нажата кнопка «Готово».

Так что код в updateTextfield, если блок никогда не вызывается.

+0

Как я могу остановить это от этого? Удаление блока if не имело никакого значения –

0

После игры я выяснил проблему. Ответ Bseh не применялся, поскольку когда я поставил точку останова в updateTextField, он определенно ударил ее. Я изменил следующее:

- (void)updateTextField:(UIDatePicker *)sender { 
    NSDateFormatter *datePickerFormat = [[NSDateFormatter alloc] init]; 
    [datePickerFormat setDateFormat:@"MM/dd/yyyy"]; //here specify your format.. 
    NSString *dateString = [datePickerFormat stringFromDate:sender.date]; 
    self.birthdayField.text = dateString; 
} 

Изменение, что id к UIDatePicker сделал разницу для меня! Я также добавил форматирование, которое я хотел.

Смежные вопросы