UITableView с вечной прокруткой

Я пытаюсь создать UITableView с датами, не должно быть очень захватывающе, я знаю. Он начинается примерно с текущей даты, но пользователь должен иметь возможность прокручивать вниз (будущее) и вверх (прошлое) сколько угодно. Это приводит к потенциально бесконечному количеству строк. Итак, как это сделать?

Возвращение NSIntegerMax , поскольку количество строк уже вызывает сбой приложения, но даже если этого не произойдет, это все равно не учитывает возможность прокрутки вверх . Я мог бы, конечно, начать половину пути, но в итоге есть максимум.

Есть идеи, как это сделать или подделать? Могу ли я каким-то образом обновить / перезагрузить таблицу, чтобы пользователь не заметил, чтобы я никогда не сталкивался с рамкой?

РЕШЕНИЕ:
Я пошел с предложением @ender и создал таблицу с фиксированным количеством ячеек. Но вместо того, чтобы перезагружать его, когда пользователь прокручивает до краев фиксированных ячеек, я перезагружал таблицу, когда прокрутка останавливается. Чтобы приспособиться к тому, что пользователь прокручивает большие расстояния без остановки, я просто увеличил количество строк до 1000, установив константу ROW_CENTER на 500. Это метод, который заботится об обновлении строк.

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    NSArray *visible = [self.tableView indexPathsForVisibleRows];
    NSIndexPath *upper = [visible objectAtIndex:0];
    NSIndexPath *lower = [visible lastObject];

    // adjust the table to compensate for the up- or downward scrolling
    NSInteger upperDiff = ROW_CENTER - upper.row;
    NSInteger lowerDiff = lower.row - ROW_CENTER;

    // the greater difference marks the direction we need to compensate
    NSInteger magnitude = (lowerDiff > upperDiff) ? lowerDiff : -upperDiff;

    self.offset += magnitude;
    CGFloat height = [self tableView:self.tableView heightForRowAtIndexPath:lower];
    CGPoint current = self.tableView.contentOffset;
    current.y -= magnitude * height;
    [self.tableView setContentOffset:current animated:NO];

    NSIndexPath *selection = [self.tableView indexPathForSelectedRow];
    [self.tableView reloadData];
    if (selection)
    {
        // reselect a prior selected cell after the reload.
        selection = [NSIndexPath indexPathForRow:selection.row - magnitude inSection:selection.section];
        [self.tableView selectRowAtIndexPath:selection animated:NO scrollPosition:UITableViewScrollPositionNone];
    }
}

Волшебство прерывается, когда пользователь прокручивает до края таблицы без остановки, но с отключенным свойством табличного представления bounces это просто похоже на незначительный сбой, но вполне приемлемо. Как всегда, спасибо StackOverflow!

9
задан epologee 21 September 2011 в 08:23
поделиться