Изящно замените клавиатуру iPhone UIPickerView

У меня есть табличное представление, которое встроило UITextFields для ввода некоторых данных. Это также имеет два других поля, которые открывают UIPickerView и UIDatePicker - как продемонстрировано в примере DateCell от Apple.

Главным образом это работает, но я не могу выяснить, как чисто перейти с клавиатуры текстового поля на другие средства выбора - каждый выскальзывает, каждый задвигает - это выглядит странным, и позиция прокрутки по табличному представлению иногда завинчивается - со всем прокрученным от вершины.

То, что я хотел бы сделать, заменить клавиатуру текстового поля без него анимирующий далеко и без него выращивающий табличное представление назад к полному размеру.

Какие-либо подсказки?

14
задан Brad Robinson 14 August 2009 в 01:41
поделиться

1 ответ

Во-первых, вот скрин-кадр, показывающий, как это выглядит.

Реализуйте 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;
}
31
ответ дан 1 December 2019 в 05:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: