У меня есть табличное представление, которое встроило UITextFields для ввода некоторых данных. Это также имеет два других поля, которые открывают UIPickerView и UIDatePicker - как продемонстрировано в примере DateCell от Apple.
Главным образом это работает, но я не могу выяснить, как чисто перейти с клавиатуры текстового поля на другие средства выбора - каждый выскальзывает, каждый задвигает - это выглядит странным, и позиция прокрутки по табличному представлению иногда завинчивается - со всем прокрученным от вершины.
То, что я хотел бы сделать, заменить клавиатуру текстового поля без него анимирующий далеко и без него выращивающий табличное представление назад к полному размеру.
Какие-либо подсказки?
Во-первых, вот скрин-кадр, показывающий, как это выглядит.
Реализуйте UITextFieldDelegate и отобразите "всплывающее окно", содержащее UIPickerView.
- (void)textFieldDidEndEditing:(UITextField *)textField {
UIPickerView *picker = [[UIPickerView alloc]
initWithFrame:CGRectMake(0, 244, 320, 270)];
picker.delegate = self;
picker.dataSource = self;
[self.view addSubview:picker];
[picker release];
}
Когда клавиатура исчезает, вид пикера становится видимым.
Если вы хотите немного углубиться в эту тему, вы можете анимировать "скольжение" UIPickerView, как на клавиатуре.
- (void)viewDidLoad {
//picker exists in the view, but is outside visible range
picker = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 480, 320, 270)];
picker.delegate = self;
picker.dataSource = self;
[self.view addSubview:picker];
[picker release];
}
//animate the picker into view
- (void)textFieldDidEndEditing:(UITextField *)textField {
[UIView beginAnimations:@"picker" context:nil];
[UIView setAnimationDuration:0.5];
picker.transform = CGAffineTransformMakeTranslation(0,-236);
[UIView commitAnimations];
}
//animate the picker out of view
- (void)textFieldDidBeginEditing:(UITextField *)textField {
[UIView beginAnimations:@"picker" context:nil];
[UIView setAnimationDuration:0.5];
picker.transform = CGAffineTransformMakeTranslation(0,236);
[UIView commitAnimations];
}
//just hide the keyboard in this example
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return NO;
}