UIPickerView как inputView, но запрещает прямое редактирование

Итак, у меня есть UIPickerView как inputView для одного из моих текстовых полей. Он работает отлично: он скользит вверх, как обычная клавиатура, я могу выбрать параметр, и он будет заполнен в текстовом поле.

Единственная проблема в том, что я могу напрямую редактировать поле, введя в него. Как запретить такое поведение? Чтобы даже курсор не отображался?

Я пробовал:

- (BOOL)textFieldShouldBeginEditing:(UITextField*)textField
{
    [self.datePick setHidden:NO];
    return NO;
}

но в этом случае пикер перестает работать полностью - не появляется.

Спасибо за вашу помощь!


person Vasiliy    schedule 17.07.2013    source источник


Ответы (4)


В итоге я сделал следующее:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range     replacementString:(NSString *)string
{
    if([textField isEqual:self.birthdayF] || [textField isEqual:self.genderF])
        return NO;
    return YES;
}

поэтому курсор все еще там, но пользователь не может ничего ввести.

person Vasiliy    schedule 25.07.2013

Вы можете установить textField.enabled = NO; и поместить UITapGestureRecognizer на textField и слушать касание, чтобы отобразить средство выбора.

 - (void) viewDidLoad
  {
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
    [textField addGestureRecognizer:tap];
    [tap release];
  }


- (void) handleTap:(UITapGestureRecognizer *)tap
  {
 //do stuff
 //if you need the textField here 
   UITextField *text = (UITextField *)tap.view; 
  }
person soryngod    schedule 17.07.2013

Попробуйте так,

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

    if([textField isEqual:selectedTextField])
         return NO;

    return YES;
}
person Venk    schedule 17.07.2013

скажите, что ваше имя текстового поля pickerTextField теперь в ViewDidLoad добавьте следующую строку

self.pickerTextField.delegate = self; (не забудьте соответствовать протоколу UITextFieldDelegate)

чем реализовать следующий метод

- (BOOL)textFieldShouldBeginEditing:(UITextField*)textField
{
    if([textField isEqual:pickerTextField])
    {
    [self.datePick setHidden:NO];
    return NO;
    }
    return YES;
}
person Suryakant Sharma    schedule 17.07.2013