弹出键盘时如何为 UITableView 设置动画?
Posted
技术标签:
【中文标题】弹出键盘时如何为 UITableView 设置动画?【英文标题】:How to animate up UITableView when Keyboard pops up? 【发布时间】:2011-11-21 20:56:55 【问题描述】:我有一个有 10 行的 UITableView
。每个单元格中都有一个UITextField
。
问题是,当我单击底部单元格中的UITextField
时,键盘会弹出并阻止该单元格。我该如何处理?我需要为 tableview 设置动画吗?
更新代码:
- (void)textFieldDidBeginEditing:(UITextField *)textField
self.vitalsTableView.contentInset=UIEdgeInsetsMake(0,0,200,0);
NSIndexPath *path = [self.vitalsTableView indexPathForSelectedRow];
[self.vitalsTableView scrollToRowAtIndexPath:path atScrollPosition:UITableViewScrollPositionTop animated:YES];
【问题讨论】:
检查Apple's documentation 的键盘notifications。我发布了example code. 【参考方案1】:使用 UITableView 的- (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated
方法
示例:
[tableView scrollToRowAtIndexPath:cellIndexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
会将您的 tableView 滚动到保持单元格可见的最低偏移量。如果您的单元格下面没有足够的单元格,您可以为您的表格设置一个 contentInset 以允许滚动偏移。
也许您的 UITextField 委托是表视图控制器。您可以拨打- (void)textFieldDidBeginEditing:(UITextField *)textField
在底部单元格的情况下:
- (void)textFieldDidBeginEditing:(UITextField *)textField
tableView.contentInset=UIEdgeInsetsMake(0,0,200,0);
[tableView scrollToRowAtIndexPath:cellIndexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
- (void)textFieldDidBeginEditing:(UITextField *)textField
tableView.contentInset=UIEdgeInsetsMake(0,0,0,0);
【讨论】:
谢谢,你能举例说明如何在我的场景中实现它吗? 我这样做了,当我单击底部单元格之一中的 UITextField 时没有任何反应。它仍然被键盘覆盖。 谢谢,这有点奏效。现在,当我单击 UITextField 时,它可以让我向上滚动,以便我可以看到单元格,但它不会自动滚动,就像它仍然覆盖单元格一样,但它至少让我滚动表格以便我可以手动查看它。有什么办法可以解决吗?我是否必须为每一行设置不同的contentInset
?【参考方案2】:
如果有人在 ios 7 中遇到同样的问题:我发现这个问题发生在我身上只是因为我忘记在我自己的 viewWillAppear:
实现中调用 viewWillAppear:
的超类实现。一行解决了问题:
-(void)viewWillAppear:(BOOL)animated
[super viewWillAppear:animated];
// Do whatever you need to
【讨论】:
以上是关于弹出键盘时如何为 UITableView 设置动画?的主要内容,如果未能解决你的问题,请参考以下文章