Я хочу прокрутить строку в табличном представлении, выбрать ячейку, затем отменить ее выбор, но она отменяется, прежде чем я ее увижу - PullRequest
2 голосов
/ 02 декабря 2009

я использую код как показано ниже

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

поведение, которое я ищу, заключается в том, что табличное представление будет прокручивать путь (что он делает) затем выберите ячейку на мгновение (что происходит, если ячейка находится на экране)

Я думаю, что анимация прокрутки является многопоточной, и ячейка выбирается до того, как она появляется на экране, это подтверждается таким образом, как когда я вызываю этот код с ячейкой на экране, которую он выбирает, а затем отменяет выбор. *

у кого-нибудь есть обходной путь? я могу сделать это таким образом (без анимации прокрутки), но это не так мило, очень резкий на самом деле

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

Ответы [ 2 ]

2 голосов
/ 02 декабря 2009

Я не уверен, но вы можете попробовать реализовать некоторые методы делегирования протокола UIScrollViewDelegate. что-то в этом роде

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

и отмените выбор там.

1 голос
/ 02 декабря 2009

Вот код из одного из моих проектов:

#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", поэтому я должен изменить стиль выделения, чтобы подсветка произошла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...