Элегантно замените iPhone-клавиатуру на UIPickerView

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

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

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

Любые подсказки?

Ответы

Ответ 1

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

Внедрить 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;
}

Ответ 2

Просто установите свойство inputView UITextField в UIPickerView.