Вопрос по uipickerview, uitextfield, uidatepicker, iphone – Элегантно замените клавиатуру iPhone на UIPickerView

14

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

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

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

Есть какие-нибудь подсказки?

Ваш Ответ

2   ответа
31

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

Реализуйте 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 & quot; слайд в & quot; как клавиатура.

- (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;
}
Как примечание, это старый способ сделать это. Более «современный» версия будет использовать свойство inputView textField.
Спасибо за этот ответ.
29

UIPickerView.

Гораздо лучше, но на ipad это выглядит не так.
Я заценил этот ответ и не установил его в стиле datepicker:stackoverflow.com/questions/4777237/…

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