Я пытаюсь создать 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!