UITableView 每次滑动一个cell的高度的距离


注意:_selectionRect是在init方法中写死的

eg:_selectionRect = CGRectMake(0,self.frame.size.height/2-22.5,45.0, 45.0);


如何让tableview滚动到点击的cell的位置

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    if (tableView ==_tableView) {

        

        selectedIndexPath = indexPath;

        //滚动到点击的那一个cell四种选择

        //UITableViewScrollPositionBottom UITableViewScrollPositionNone UITableViewScrollPositionTop UITableViewScrollPositionMiddle

        [_tableViewscrollToNearestSelectedRowAtScrollPosition:UITableViewScrollPositionBottomanimated:YES];

        

//通知vc点击了哪一个cell

        [self.delegateselector:_tableViewdidSelectRowAtIndex:indexPath.row];

        [_tableViewreloadData];

    }

}


#pragma mark拖动的时候

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {

    

    if (!decelerate) {

        [selfscrollToTheSelectedCell];

    }

}

#pragma mark 拖动执行的关键代码

- (void)scrollToTheSelectedCell {

    

    CGRect selectionRectConverted = [selfconvertRect:_selectionRecttoView:_tableView];

    NSArray *indexPathArray = [_tableViewindexPathsForRowsInRect:selectionRectConverted];

    

    CGFloat intersectionHeight =0.0;

    

    for (NSIndexPath *indexin indexPathArray) {

        //looping through the closest cells to get the closest one

        UITableViewCell *cell = [_tableViewcellForRowAtIndexPath:index];

        CGRect intersectedRect =CGRectIntersection(cell.frame, selectionRectConverted);

        

        if (intersectedRect.size.height>=intersectionHeight) {

            selectedIndexPath = index;

            intersectionHeight = intersectedRect.size.height;

        }

    }

    if (selectedIndexPath!=nil) {

        //As soon as we elected an indexpath we just have to scroll to it

        [_tableViewscrollToRowAtIndexPath:selectedIndexPathatScrollPosition:UITableViewScrollPositionBottomanimated:YES];

        [self.delegateselector:_tableViewdidSelectRowAtIndex:selectedIndexPath.row];

        [_tableViewreloadData];

    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值