Próbuję utworzyć UITableView z datami, nie powinno być bardzo ekscytujące, wiem. Zaczyna się około bieżącej daty, ale użytkownik powinien móc przewinąć w dół (przyszłość) i do góry (przeszłość), o ile chce. Powoduje to potencjalnie nieskończoną liczbę wierszy. Więc jaki jest sposób, aby go utworzyć?Wieczne przewijanie UITableView
Wracając NSIntegerMax
jak liczba wierszy już awarii aplikacji, ale nawet jeśli nie, to nadal nie uwzględnia możliwość przewijania się. Mógłbym zacząć w połowie drogi, ale w końcu jest maksimum.
Wszelkie pomysły, jak to zrobić lub podrobić to? Czy mogę zaktualizować/odświeżyć tabelę w jakiś sposób, bez zauważania przez użytkownika, więc nigdy nie natknę się na granicę?
ROZWIĄZANIE:
poszedłem z sugestią @ Endera i wykonany stół o stałej wysokości komórek. Ale zamiast przeładować, gdy użytkownik przewinie się do krawędzi zblokowanych komórek, przeładowałem stół, gdy przewijanie zatrzyma się. Aby zmieścić się z użytkownikiem przewijającym duże odległości bez zatrzymywania, po prostu zwiększyłem liczbę wierszy do 1000, ustawiając stałą ROW_CENTER na 500. Jest to metoda, która zajmuje się aktualizowaniem wierszy.
- (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];
}
}
Magiczne przerwy, gdy użytkownik przewija do krawędzi stołu bez zatrzymywania się, ale z widoku tabeli bounces
nieruchomość niepełnosprawnej, to po prostu czuje się jak drobne usterki, ale całkowicie do przyjęcia. Jak zwykle dzięki StackOverflow!
Proszę wypróbować kod w mojej odpowiedzi poniżej. Używa prostej logiki. –