Как я могу добавить UIDatePicker Subview с рабочим взаимодействием с пользователем - PullRequest
1 голос
/ 29 января 2010

У меня есть приложение на основе представления, в котором есть несколько текстовых полей, которые я пытаюсь заполнить некоторыми средствами выбора. Например, один из них будет для выбора даты. Я использую следующее, чтобы добавить новый вид в конец моего текущего вида, а затем прокрутить весь вид вверх:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
  if(textField == [self date]) {        
    editingDate = YES;
    UIDatePicker *pv = [[UIDatePicker alloc] initWithFrame:CGRectMake(0,460,0,0)];
    pv.userInteractionEnabled = YES;
    [self.view addSubview:pv];  
    textField.placeholder = @"currently selecting below";   
    [self scrollTheView:YES];
    return NO;
  } 
  return YES;
}

Мой метод scrollTheView выполняется следующим образом:

- (void)scrollTheView:(BOOL) moveUp {
    int scrollAmount = 212;
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.3];
    CGRect rect = self.view.frame;
    if(moveUp){
        rect.origin.y -= scrollAmount;
    }
    else {
        rect.origin.y += scrollAmount;
    }
    self.view.frame = rect;
    [UIView commitAnimations];
} 

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

Ответы [ 2 ]

2 голосов
/ 29 января 2010

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

    UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(0, 480, 320, 216)];
    UIDatePicker *pv = [[UIDatePicker alloc] initWithFrame:CGRectMake(0,0,320,216)];
    [myView addSubview:pv];

    [self.view.superview addSubview:myView];  

и изменение моего метода прокрутки для дополнительной прокрутки этого нового представления:

    UIView *sv = self.view.superview;
    UIView *subv = [[sv subviews] objectAtIndex:1];
    CGRect rect2 = subv.frame;
    if(moveUp){
        rect2.origin.y -= scrollAmount;
    }
    else {
        rect2.origin.y += scrollAmount;
    }
    subv.frame = rect2;

Мне удалось достичь цели. Спасибо Бену за помощь.

1 голос
/ 29 января 2010

Из того, что вы описали, звучит то, что вы размещаете UIDatePicker внутри другого представления, но за его пределами. Если «Подвиды клипов» в IB не отмечены, вы все равно сможете ВИДЕТЬ свой сборщик, но, поскольку он не находится в области границ, он не будет доступен для касания.

...