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

Posted

技术标签:

【中文标题】将自定义 UITableViewCell 滚动到键盘上方?【英文标题】:Scroll custom UITableViewCell to right above keyboard? 【发布时间】:2012-02-28 02:29:51 【问题描述】:

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

所以现在我有了 UIKeyboard 的 Y 坐标,并且我的 UITableView 与单元格一起正常工作。

我该如何使用那个 Y 坐标(浮点数),以便将我的 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];
    

【问题讨论】:

scrollToRowAtIndexPath 方法知道 tableView 的可见部分,因此不需要 if 语句。 【参考方案1】:

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,如果单元格不在 tableView 中或者它不是单元格,则可能会发生这种情况。

【讨论】:

我尝试了第一个,我有索引路径,我做了 UITableViewScrollPositionTop,它不会在任何地方滚动 我把它贴在上面 :) P.S - if 语句被调用(用 NSLogs 确认) 还有其他想法吗? tableview 肯定是在 IB 中连接的,所以我不确定为什么这不起作用:/ 很难说发生了什么,我想说确保你所有的对象都是你认为的那样,单元格和索引路径以及表格视图。如果您愿意,请发布更多上下文代码。 真的没有更多的代码了,没有一个对象是 nil 并且单元格的 indexPath 是 1。所以我不确定它为什么不能正常工作。【参考方案2】:

UITableView 会在键盘显示时自行调整。

但是,如果您没有将自定义单元格的 UITableViewCellSelectionStyle 设置为 UITableViewCellSelectionStyleNone,则不会这样做。

我用下面的代码解决了。

    [cell setSelectionStyle:UITableViewCellSelectionStyleNone];

【讨论】:

以上是关于将自定义 UITableViewCell 滚动到键盘上方?的主要内容,如果未能解决你的问题,请参考以下文章

将自定义 UITableViewCell 与 ViewCellRenderer 一起使用时出现 NullReferenceException

将自定义 UITableViewCell 从 nib 加载到 Swift 中的 UIViewController

自定义 UITableViewCell 图像直到滚动才显示

UITableViewCell 使用自定义单元格滚动不平滑

自定义 UITableViewCell 快速滚动

UITableViewCell 滚动检测