2014-12-04 7 views
0

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

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

- (void)adjustView:(NSNotification *)notification { 
    CGRect keyboardFrame = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; 
    keyboardFrame = [self.view convertRect:keyboardFrame fromView:self.view.window];  
    CGRect viewFrame = self.searchView.frame; 
    viewFrame.origin.y = keyboardFrame.origin.y - viewFrame.size.height; 
    self.searchView.frame = viewFrame; 

} 

Здесь SearchView это вид, содержащий текстовое поле и кнопку. Любая помощь очень ценится.

+0

Является ли текстовое поле фактически частью таблицы? Как в одной из его ячеек? –

+0

нет нет. Основной вид имеет табличное представление и представление, в котором есть 2 виджета - текстовое окно и кнопка. – user1259574

+0

Не могли бы вы опубликовать код, который вы используете для перемещения UITextField вверх и вниз? –

ответ

0

Я не уверен, что это именно то, что вы ищете, но вы можете установить делегат UITextField и использовать эти методы делегата. Они из моего кода, но они оживляют рамку представления в сторону, когда клавиатура появляется, а затем назад, когда это делается.

#pragma mark - Text Editing functions 

- (BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 
    [textField resignFirstResponder]; 

    return YES; 
} 


- (void)textFieldDidEndEditing:(UITextField *)textField 
{ 
    CGRect viewFrame = self.frame; 
    viewFrame.origin.y += animatedDistance; 

    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 
    [UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION]; 

    self.frame = viewFrame; 

    [UIView commitAnimations]; 
} 


- (void) textFieldDidBeginEditing:(UITextField*) textField { 
    CGRect textFieldRect = [self.window convertRect:textField.bounds fromView:textField]; 
    CGRect viewRect  = [self.window convertRect:self.bounds fromView:self]; 
    CGFloat midline   = textFieldRect.origin.y + 0.5 * textFieldRect.size.height; 
    CGFloat numerator  = midline - viewRect.origin.y - MINIMUM_SCROLL_FRACTION * viewRect.size.height; 
    CGFloat denominator  = (MAXIMUM_SCROLL_FRACTION - MINIMUM_SCROLL_FRACTION) * viewRect.size.height; 
    CGFloat heightFraction = numerator/denominator; 

    if (heightFraction < 0.0) { 
     heightFraction = 0.0; 
    } else if (heightFraction > 1.0) { 
     heightFraction = 1.0; 
    } 

    animatedDistance = floor(PORTRAIT_KEYBOARD_HEIGHT * heightFraction); 

    CGRect viewFrame = self.frame; 
    viewFrame.origin.y -= animatedDistance; 

    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 
    [UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION]; 

    self.frame = viewFrame; 

    [UIView commitAnimations]; 
} 
Смежные вопросы