使用UITableView自动滚动

时间:2013-01-13 00:10:52

标签: xcode ipad uitableview

我正在制作一款ipad应用。在应用程序中,我有一个UITableView,其中包含用户可以键入的自定义单元格。唯一的问题是当你按下其中一个下部单元格时,键盘会出现并阻塞单元格,因此你看不到它。我喜欢它,所以当你按下键盘正上方的单元格时, UITableView向上滚动并反复显示另外一个单元格,以便您可以看到您正在键入的内容。感谢。

图片:http://i.stack.imgur.com/Kn4CT.png

1 个答案:

答案 0 :(得分:0)

假设您正在输入uitextfield,请实现textfield委托方法。

计算键盘显示时的键盘高度。

编辑:

这就是我要解决问题的方法:

使用唯一编号标记每个文本(保留baseConstantInteger,确保您的标记绝对唯一)。

baseConstant可以是任何东西,让我们假设baseConstantInteger = 500;

对于cellForRowAtIndexPath方法中的每个单元格,在自定义单元格中设置

textField.tag = baseConstantInteger+indexPath.row

然后

- (void)textFieldDidBeginEditing:(UITextField *)textField
{   
    int clickedRow = textField.tag - baseConstantInteger;
    [self.theTableView scrollToRowAtIndexPath:(indexPath based on clickedRow) atScrollPosition:UITableViewScrollPositionMiddle animated:NO];
    [UIView animateWithDuration:0.4
                     animations:^{
                         theTableView.frame = CGRectMake(theTableView.frame.origin, theTableView.contentSize.width, theTableView.frame.size.height-keyBoardHeight);
                     }
     ];
}

并在返回时(类似于didEndEditing)

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [UIView animateWithDuration:0.2
                     animations:^{
                         theTableView.frame = CGRectMake(theTableView.frame.origin, theTableView.contentSize.width, theTableView.frame.size.height+keyBoardHeight);
                     }
     ];
    [textField resignFirstResponder];
    return NO/YES;
}

ps:baseConstantInteger只是为了确保您的代码安全。这不是绝对必要的。