我想滚动到表格视图中的一行,选择单元格然后取消选择它,但在我看到它之前取消选择它

时间:2009-12-02 11:28:27

标签: iphone uitableview

即时使用以下代码

    [sampleListTableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionMiddle animated:YES];
    [sampleListTableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionMiddle];
    [sampleListTableView deselectRowAtIndexPath:indexPath animated:YES];

我正在寻找的行为是表视图将滚动到路径(它所做的) 然后暂时选择单元格(如果单元格在屏幕上,它会这样做)

我认为滚动动画是有线程的,并且在屏幕上出现之前正在选择单元格,这是以某种方式确认的,就像我用它选择的屏幕上的单元格调用此代码然后取消选择一样。“ p>

任何人都有解决方法吗?我可以这样做(没有滚动动画),但事实并非如此甜美,非常突然

    [sampleListTableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionMiddle animated:NO];
    [sampleListTableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionMiddle];
    [sampleListTableView deselectRowAtIndexPath:indexPath animated:YES];

2 个答案:

答案 0 :(得分:2)

我不确定但您可以尝试实现UIScrollViewDelegate协议的一些委托方法。喜欢这样的

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView{

并在那里取消选择。

答案 1 :(得分:1)

以下是我的一个项目的代码:

#define kHighlightTableRowDuration  0.5

- (void)scrollToLastInsertedItem:(NSIndexPath *)indexPath
{

    @try
    {

        [myTableView scrollToRowAtIndexPath:indexPath
                       atScrollPosition:UITableViewScrollPositionBottom animated:YES];
        if( rows >= 8 )
            [myTableView performSelector:@selector(flashRowAtIndexPath:) withObject:indexPath afterDelay:0.5];

    }
    @catch(NSException *ex) // NSRangeException
    {
        ALog(@"NSRangeException: %@",ex);
    }

}

// briefly highlight the last added item
- (void)flashRowAtIndexPath:(NSIndexPath *)indexPath
{

    // if cell is offscreen, nil returned
    UITableViewCell *cell = [self cellForRowAtIndexPath:indexPath];
    if( cell ){
        BOOL shouldHighlight = YES;

        if( ! cell.highlighted ){
            DLog(@"Starting cell highlight, setting on: %@", indexPath);
            shouldHighlight = YES;
            cell.selectionStyle = UITableViewCellSelectionStyleBlue;
            [self performSelector:@selector(flashRowAtIndexPath:) withObject:indexPath afterDelay:kHighlightTableRowDuration];
        }else{
            DLog(@"Ending cell highlight, setting off: %@", indexPath);
            cell.selectionStyle = UITableViewCellSelectionStyleNone;
            shouldHighlight = NO;
        }
        [cell setHighlighted:shouldHighlight animated:YES];
    }


}

flashRowAtIndexPath被调用两次,第一次打开高亮显示,然后再次在给定延迟后将其关闭。在我的UITableView选择样式中通常为“none”,因此我必须更改选择样式以突出显示。