scrollToRowAtIndexPath不适用于第一个单元格

时间:2015-05-22 17:06:14

标签: ios objective-c uitableview

我开始编辑时尝试滚动到表格单元格内的文本字段。 它适用于其他表格单元格,第一个除外:

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    UITableViewCell *cell = (UITableViewCell *)textField.superview.superview;
    [self.tableView scrollToRowAtIndexPath:[self.tableView indexPathForCell:cell] atScrollPosition:UITableViewScrollPositionTop animated:YES];
}

我测试了[self.tableView indexPathForCell:cell]的值,它是为第一行和第一部分设置的。

我认为这与第一部分的heightForHeaderInSection非常大(覆盖大约一半的屏幕)这一事实有关。

2 个答案:

答案 0 :(得分:0)

我遇到了这个问题,刚从这个博客link

解决了这个问题

以下是流程: 在UITextFieldDelegate的textFieldDidBeginEditing方法中,唯一需要注意的是在实际显示键盘之前调用委托。为了解决这个问题,我们使用延迟性能来延迟滚动:

-(void) scrollToCell:(NSIndexPath*) path {
    [_tableView scrollToRowAtIndexPath:path atScrollPosition:UITableViewScrollPositionNone animated:YES];
}

-(void) textFieldDidBeginEditing:(UITextField *)textField {
    NSIndexPath* path = [NSIndexPath indexPathForRow:row inSection:section];
    [self performSelector:@selector(scrollToCell:) withObject:path afterDelay:0.5f];
}

答案 1 :(得分:0)

我猜这是一个错误。通过设置表contentOffset:

,我能够解决这个问题
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    CGPoint contentOffset = ...; // calculate offset for cell
    [UIView animateWithDuration:0.5 animations:^{
        self.tableView.contentOffset = contentOffset;
    }];
}