将自定义 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