UITableView在框架中间选择了行

时间:2014-01-21 11:28:44

标签: ios uitableview uipickerview

我需要有可能将所选行放在帧的中间。因此,如果我选择第一行或最后一行,则该行必须位于中心,而不是剪切到tableview的顶部(或底部)(类似于UIPickerView)。

这是我在scrollViewWillEndDragging上的代码:

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView
                     withVelocity:(CGPoint)velocity
              targetContentOffset:(inout CGPoint *)targetContentOffset {

    CGFloat rowHeight = [delegate rowHeightForMyPickerView:self];
    CGFloat floatVal = targetContentOffset->y / rowHeight;
    NSInteger rounded = (NSInteger)(lround(floatVal));
    targetContentOffset->y = rounded * rowHeight;
    NSLog(@"Offset: %f Float: %f Row: %d",targetContentOffset->y,floatVal,rounded);
    [delegate myPickerView:self isOverRow:rounded];
}

使用此代码,我创建了捕捉效果,但rounded不是正确的行。用双倍高度改变第一个和最后一个单元格高度会使问题消失,但我不喜欢这个解决方案。

1 个答案:

答案 0 :(得分:0)

使用UITableView方法,indexPath课程也可以使用动画滚动到所选的scrollToRowAtIndexPath:atScrollPosition:animated。最好在tableView:didSelectRowAtIndexPath:indexPath方法中添加:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
     [tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionMiddle animated:YES]; //scrolls the selected cell to middle
}