获得UITableViewCell 在屏幕中的位置

如果UITableView的每一个cell中都有一个textField,我们想在点击textField时,如果弹起的键盘挡住了cell,就将cell弹起一定距离,我们知道通过可以得到每个cell在tableVIew中的rect

CGRect rectInTable = [_tableView rectForRowAtIndexPath:indexPath];

但是当tableView滑动的时候, label在屏幕中的位置会发生变化 应该怎样去计算cell在屏幕中的位置呢,毕竟键盘是相对屏幕的,不是相对tableVUew的,我们可以通过:

- (CGRect)convertRect:(CGRect)rect toView:(nullable UIView *)view;

将cell在tableView的rect转换为在tableView的父试图的rect,下面是一段cell弹起代码(红色两行是坐标的转化):

- (void) keyboardWillShow : (NSNotification*)notification {

    CGRect keyboardFrame = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];

    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:_firstResponderFieldIndex inSection:0];


    CGRect rectInTable = [_tableView rectForRowAtIndexPath:indexPath];

    CGRect rectInSelfview = [_tableView convertRect:rectInTable toView:self.view];

    CGFloat cellBottomY = rectInSelfview.origin.y + rectInSelfview.size.height;

    

    if (cellBottomY >  keyboardFrame.origin.y ) {   //键盘是否会挡住点击cell的判断

        CGFloat delta = _tableView.frame.origin.y - (cellBottomY - keyboardFrame.origin.y);

        _tableView.frame = CGRectMake(0, delta, SCREEN_WIDTH, _tableView.frame.size.height);

    }

}


其中的_firstResponderFieldIndex就是点击的cell的tag,有疑问可以联系我讨论:qq 1246489125

相关文章
相关标签/搜索