2010-01-29 4 views
1

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

- (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

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

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

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

+0

Да, все. Я вижу это, но не использую его. Если я проверю «подзаголовки клипов», то я даже не могу увидеть subviews, хотя ... так что такое реальное решение здесь? Является ли мой подход совершенно неправильным? – shawnwall

+0

Похоже, вы идете по неверному пути. Попробуйте добавить UIDatePicker в свой вид viewController. Если это то же самое, что вы манипулируете в scrollTheView, НЕ ДЕЛАЙТЕ. Вы никогда не должны настраивать границы вида. Попробуйте переместить материал в подпункты и перемещать их. –

+0

Ах, моя сложность в том, что я хочу перенести весь свой первоначальный вид вверх, так что, когда новый datepicker прокручивается снизу, он по существу «толкает» существующее представление вверх. В настоящее время я добавляю новый сборщик, используя [self.view addSubview: picker]; Происхождение self.view.frame - это то, к чему я продвинулся до сих пор в коде метода выше. – shawnwall

 Смежные вопросы

  • Нет связанных вопросов^_^