Xcode/iOS5: показывать UIDatePicker при нажатии UITextField (+ скрыть клавиатуру по умолчанию)

Я хотел бы вызывать UIDatePicker только тогда, когда активен UITextField. Когда дата выбрана, она должна отображаться в том же UITextField.

Я даже не знаю, как вызвать сборщика.

Может кто-нибудь мне помочь?


person filou    schedule 12.11.2011    source источник


Ответы (2)


есть метод делегата, называемый

-(void)textFieldDidBeginEditing:(UITextField*)textField
{
[textField resignFirstResponder];
 in this you have to do this
pick = [[UIDatePicker alloc] init];
[pick setFrame:CGRectMake(0,200,320,120)];
[pick addTarget:self action:@selector(done) forControlEvents:UIControlEventValueChanged]
[self.view addSubview:pick];
}

in

-(void)done
{
[textfield setText:pick.date];
}

отпустите медиатор в Dealloc

person Tendulkar    schedule 12.11.2011
comment
Не забудьте отпустить кирку. - person jbat100; 12.11.2011
comment
Спасибо, Хитман. Но я получаю сообщение об ошибке: Использование необъявленного идентификатора «выбор». - person filou; 12.11.2011
comment
UIDatePicker *pick напишите это в файле .h - person Tendulkar; 12.11.2011
comment
Хорошо. Но теперь в -(void)done ошибка: Несовместимые типы указателей отправляют «NSDate *» в параметр типа «NSString *». - person filou; 12.11.2011
comment
Возьмите NSDateFormatter, используя его, вы можете преобразовать NSDate в NSString. - person Tendulkar; 14.11.2011

Чтобы добавить к ответу Hitman, я думаю, вам следует реализовать

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField

вместо этого и вернуть НЕТ. Затем покажите средство выбора даты и заполните текст UITextField в соответствии с выбором средства выбора.

person jbat100    schedule 12.11.2011
comment
Спасибо jbat :) Но я получаю сообщение об ошибке: Использование необъявленного идентификатора 'pick'. - person filou; 12.11.2011
comment
Просто создайте ivar (переменную экземпляра), объявив выбор (UIDatePicker* pick;) в своем заголовке (и создайте свойство сохранения). Таким образом, вы можете сохранить ссылку на него, чтобы удалить его из представления, когда пользователь закончит работу. - person jbat100; 12.11.2011
comment
Хорошо. Но теперь в -(void)done ошибка: Несовместимые типы указателей отправляют «NSDate *» в параметр типа «NSString *». - person filou; 12.11.2011
comment
Вам нужно преобразовать NSDate (pick.date) в строку (используя NSDateFormatter), а затем назначить эту строку для textfield.text. - person jbat100; 12.11.2011
comment
Я пробовал это раньше: теперь средство выбора появляется в каждом текстовом поле и больше не исчезает. - person filou; 12.11.2011
comment
затем удалите его из представления ([pick removeFromSuperview]). - person jbat100; 12.11.2011