средство выбора не отображалось

пожалуйста, у меня есть часы с этой проблемой, не находя решения и не обращаясь к вам за этим :)

у меня есть UIPickerView, который должен отображаться в нижней части представления, когда пользователь нажимает на UITextField (это то, что мое требование к приложению обязывает меня делать), поэтому я реализую этот метод, чтобы поймать событие касания текстового поля:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

    UITouch *touch;
    touch=[touches anyObject];
    CGPoint point=[touch locationInView:self.view];
    if(CGRectContainsPoint([typeCarburantTextField frame],point))
    {
        [self pickerTypeCarburantsShow];

    }

}

и этот метод для предотвращения отображения клавиатуры, когда пользователь нажимает на текстовое поле:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{

    return NO;

}

pickerTypeCarburantsShow

-(IBAction)pickerTypeCarburantsShow{

        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:0.5];
        CGAffineTransform transform=CGAffineTransformMakeTranslation(0, 240);
        pickerViewTypesCarburants.transform=transform;
        [self.view addSubview:pickerViewTypesCarburants];
        [UIView commitAnimations];

    }

все мои подключения к IB довольно хороши, однако, когда я запускаю и нажимаю на UITextField, клавиатура не появляется, но я не вижу, чтобы средство выбора отображалось, пожалуйста, помогите, спасибо заранее :)


person Malloc    schedule 17.04.2011    source источник


Ответы (3)


То, что вы могли бы хотеть, вероятно, это..

UITextField имеет это свойство,

inputView

Настраиваемое представление ввода для отображения, когда текстовое поле становится первым ответчиком.

@property (readwrite, retain) UIView *inputView

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

Значение по умолчанию этого свойства равно нулю.

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

например, чтобы отобразить окно выбора вместо клавиатуры, вы можете захотеть

textView.inputView = [[UIPickerView alloc] initWithFrame:CGRectMake(...)];
person govi    schedule 17.04.2011
comment
Привет, имя моего представления, которое содержит средство выбора, — pickerViewTypesCarburants. должно ли это стать таким: @property (чтение, запись, сохранение) UIView *pickerViewTypesCarburants ?? а для синтеза?? Кроме того, я не понял вашего второго утверждения, что должно быть textView, не должно быть представлением pickerViewTypesCarburants ?? - person Malloc; 17.04.2011
comment
я отредактировал ответ ... дайте мне знать, если вам это нужно уточнить - person govi; 17.04.2011
comment
так что .. если я правильно понимаю, это будет textView.inputView = [self pickerViewTypesCarburants], учитывая, что uitextfield называется textview - person govi; 17.04.2011
comment
хм... в - (void)viewDidLoad в вашем UIViewController. Поскольку у вас есть uiPickerView как pickerViewTypesCarburants, все, что вам нужно сделать, это установить его, как указано выше. textView.inputView = pickerViewTypesCarburants - person govi; 18.04.2011

У вашего PickerView есть набор делегатов и источников данных? Иначе не появится.

person Matthew Frederick    schedule 17.04.2011
comment
Да, я проверил это, пожалуйста, если вам нужен другой код метода, просто скажите мне :))) - person Malloc; 17.04.2011
comment
@Malek Покажите свой метод pickerTypeCarburantsShow, пожалуйста (добавьте его в свой вопрос, отредактировав его). - person Matthew Frederick; 17.04.2011

моя проблема была решена, поэтому проблема была в методе делегата UITextField, я реализовал неправильный метод:

-(BOOL)textFieldShouldReturn:(UITextField *)textField{

    [textField resignFirstResponder];
    return YES;
}

вместо этого должен быть этот метод для отображения UIPickerView :

- (void)textFieldDidBeginEditing:(UITextField *)textField{
    [textField resignFirstResponder];
    [self pickerTypeCarburantShow];
}

где pickerTypeCarburantShow - это метод IBAction, который должен анимировать все представление UIPickerView. Надеюсь, это поможет тем, кто борется с той же проблемой :)

person Malloc    schedule 18.04.2011