Ios 搜索文本字段和表视图存在问题

Ios 搜索文本字段和表视图存在问题,ios,uitableview,Ios,Uitableview,我有一个视图,上面有tableview,底部有一个搜索文本字段(带按钮)。我正在尝试实现动态搜索,以便在用户键入时重新加载tableview。searchfield很好地位于键盘顶部并执行搜索。但在某些情况下,当用户仍在打字时,它会进入键盘下方。这通常发生在搜索返回0个结果时,这意味着tableview为空,或者tableview中的行正好适合分配给tableview的高度。我不知道为什么tableview重载会使搜索字段返回页面底部,即使搜索字段不是tableview的一部分 以下是根据键盘状

我有一个视图,上面有tableview,底部有一个搜索文本字段(带按钮)。我正在尝试实现动态搜索,以便在用户键入时重新加载tableview。searchfield很好地位于键盘顶部并执行搜索。但在某些情况下,当用户仍在打字时,它会进入键盘下方。这通常发生在搜索返回0个结果时,这意味着tableview为空,或者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是包含文本字段和按钮的视图。
非常感谢您提供的任何帮助。

我不确定这是否正是您想要的,但您可以设置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];
}
#pragma标记-文本编辑功能
-(BOOL)textField应返回:(UITextField*)textField
{
[textField resignFirstResponder];
返回YES;
}
-(void)textfielddidediting:(UITextField*)textField
{
CGRect viewFrame=self.frame;
viewFrame.origin.y+=动画距离;
[UIView beginAnimations:nil上下文:NULL];
[UIView setAnimationBeginsFromCurrentState:是];
[UIView设置动画持续时间:键盘动画持续时间];
self.frame=viewFrame;
[UIView委员会];
}
-(无效)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分子=中线-viewRect.origin.y-最小滚动分数*viewRect.size.height;
CGFloat分母=(最大滚动分数-最小滚动分数)*viewRect.size.height;
CGFloat heightFraction=分子/分母;
如果(高度分数<0.0){
高度分数=0.0;
}否则如果(高度分数>1.0){
高度分数=1.0;
}
动画距离=地板(纵向\键盘\高度*高度分数);
CGRect viewFrame=self.frame;
viewFrame.origin.y-=动画距离;
[UIView beginAnimations:nil上下文:NULL];
[UIView setAnimationBeginsFromCurrentState:是];
[UIView设置动画持续时间:键盘动画持续时间];
self.frame=viewFrame;
[UIView委员会];
}

文本字段实际上是tableview的一部分吗?就像在它的一个细胞里?不,它不是。主视图有一个tableview和一个视图,其中有两个小部件-textview和一个按钮。您可以发布用于上下移动UITextField的代码吗?添加了我用于移动UITextField的代码。但是请注意,当textfield自动转到时,不会调用此方法。仅当我单击文本字段并想要键入某个内容时,或者当我单击键盘上的“完成”按钮时,才会调用此函数。此问题发生在代码中的其他地方,而不是在您的
adjustView:
方法中。我在下面的回答中解释了原因。在您的代码中(例如在
viewdilayoutsubviews
中)是否还有其他地方可以设置
self.searchView.frame.height