UTTableView
è una sottoclasse di UIScrollView
, in modo da poter utilizzare scrollViewDidScroll
metodo per riorganizzare la vostra posizione di scorrimento TableView dopo scorrimento.
È possibile utilizzare tableView.contentOffset
per ottenere la posizione di scorrimento corrente. E dividendolo in un numero significativo puoi ottenere quale cella è in cima.
int cellIndex = tableView.contentOffset/cellHegiht;
Oppure si può ottenere cellule attualmente visibile sul centro (in alto, in basso) in questo modo:
NSArray *indexPathsForVisibleRows = [tableView indexPathsForVisibleRows];
NSIndexPath *selectedIndexPath = [indexPathsForVisibleRows objectAtIndex:(indexPathsForVisibleRows.count/2)]; //this gets center cell
Dopo aver calcolato quale cella dovrebbe essere cliccato per il bordo in alto (o in basso) è possibile correggere la deriva dal bordo cellulare chiamando:
[tableView scrollToRowAtIndexPath:selectedIndexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
È possibile utilizzare UIScrollViewDelegate
metodi per attivare snapping. È possibile attivare sia quando l'animazione a scorrimento è completata o mentre l'animazione continua ancora. Ciò genererà diverse interazioni con gli utenti e non si può dire che uno sia migliore di un altro.
Ma proprio l'implementazione del metodo e nient'altro che segue sembra andare a essere il mio preferito:
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView
withVelocity:(CGPoint)velocity
targetContentOffset:(inout CGPoint *)targetContentOffset {
int cellHeight = 41;
*targetContentOffset = CGPointMake(targetContentOffset->x,
targetContentOffset->y - (((int)targetContentOffset->y) % cellHeight));
}
Questo metodo viene chiamato quando l'utente tocca su TableView
per notificare l'applicazione. targetContentOffset
è una variabile inout
in modo da poter effettivamente impostare la posizione di scorrimento finale mentre l'animazione continua. Usando il diritto cellHeight
, il tuo TableView
scatterà sempre alle celle.
fonte
2011-11-10 15:37:22
Grazie per aver mostrato come utilizzare la variabile 'inout'. Funzionalità molto bella! – Besi
+1 Ti ringrazio anche indicando la variabile "inout". – jpswain
Con i tuoi calcoli, non puoi mai scorrere fino all'ultima riga del tavolo ... non è un problema risolverlo. - sicuramente la migliore soluzione per questo. – scottbates22