将自定义UITableViewCell滚动到键盘正上方?

时间:2012-02-28 02:29:51

标签: ios uitableview scroll cell

目前我有一个带有自定义单元格的UITableView,并且在每个单元格中都有一个UITextField,问题是UIKextField有时会覆盖UITextField。

所以现在我有了UIKeyboard的Y坐标,我的UITableView与单元格一起正常运行。

所以我怎么能使用那个Y坐标(float),以便将我的UITableView滚动到那个Y坐标加上单元格的高度,以便将它放在我的UIKeyboard上面?

当键盘隐藏时,我如何将UITableView重置到它所处的正常位置?

任何建议都将不胜感激!

谢谢!

CustomCell *cell = (CustomCell*)[[thetextField superview] superview];
    CGRect cellRect = [cell convertRect:cell.frame toView:self.view];
    float bottomCell = cellRect.origin.y - cellRect.size.height;
    if (bottomCell >= keyboardY) {
        NSIndexPath *indexPath = [thetableView indexPathForCell:cell];
        [thetableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
    }

2 个答案:

答案 0 :(得分:2)

UITableView的一个或另一个

- (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated;
- (void)scrollToNearestSelectedRowAtScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated;

我猜测控件没有进入if语句。考虑跳过y坐标检查,而不管它只是滚动表视图。

CustomCell *cell = (CustomCell *)[[theTextField superview] superview];
NSIndexPath *indexPath = [theTableView indexPathForCell:cell];
[theTableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];

好的,如果您确定它已被调用,那么请确保您的indexPath不是nil,如果cell不在tableView中或者它不是一个单元格,则可能会发生这种情况。

答案 1 :(得分:0)

只要显示键盘,UITableView就会自行调整。

但是,如果您未将自定义单元格的UITableViewCellSelectionStyle设置为UITableViewCellSelectionStyleNone,则不会执行此操作。

我使用下面的代码解决了。

    [cell setSelectionStyle:UITableViewCellSelectionStyleNone];