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

14

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

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

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

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

Ваш Ответ

2   ответа
29

Свойство inputView для UIPickerView.

Гораздо лучше, но это не такне смотреть прямо на Ipad. Я TMB
d зацените этот ответ и просто не устанавливайте его в стиле datepicker:stackoverflow.com/questions/4777237/... LordParsley
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 "скользить в " как клавиатура.

- (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. Joshua Weinberg
Спасибо за этот ответ. camilo

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