2014-01-21 29 views
0

我需要有可能將選中的行放在框架的中間。所以如果我選擇第一行或最後一行,這一行需要位於中心,而不是剪切到tableview的頂部(或底部)(如UIPickerView)。UITableView選中的行在框架中間

這是我在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是不正確的行。使用雙倍高度更改第一個和最後一個單元格高度會使問題消失,但我不喜歡該解決方案。

回答

0

UITableView類可以使用scrollToRowAtIndexPath:atScrollPosition:animated方法滾動到選定的indexPath,並帶有動畫。優選地,在tableView:didSelectRowAtIndexPath:indexPath方法,添加:

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

是不是我所需要,例如,如果我有3個可見行,我需要把第一行(索引= 0)在所述第二位置,從而:一個空白空間,row0,row1與我需要的最後一行相同:最後一行,最後一行,空格 – kikko088