UTTableView
jest podklasą UIScrollView
, dzięki czemu można używać scrollViewDidScroll
metody, aby zmienić swoją pozycję przewijania Tableview po zwoju.
Możesz użyć numeru tableView.contentOffset
, aby uzyskać aktualną pozycję przewijania. Dzieląc ją na znaczącą liczbę, możesz uzyskać komórkę na wierzchu.
int cellIndex = tableView.contentOffset/cellHegiht;
Albo można dostać aktualnie widoczną komórki na środku (góra, dół), tak jak to:
NSArray *indexPathsForVisibleRows = [tableView indexPathsForVisibleRows];
NSIndexPath *selectedIndexPath = [indexPathsForVisibleRows objectAtIndex:(indexPathsForVisibleRows.count/2)]; //this gets center cell
Po obliczeniu która komórka należy kliknąć jego krawędzi na górze (lub na dole) można skorygować dryf od krawędzi komórki przez wywołanie:
[tableView scrollToRowAtIndexPath:selectedIndexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
można użyć UIScrollViewDelegate
sposobów aktywowania przyciągania. Możesz aktywować po zakończeniu przewijanej animacji lub gdy animacja będzie kontynuowana. To wygeneruje inną interakcję z użytkownikiem i nie może powiedzieć, że jeden jest lepszy od drugiego.
Ale wykonawczych następujące metody i nic poza tym wygląda na to będzie mój ulubiony:
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView
withVelocity:(CGPoint)velocity
targetContentOffset:(inout CGPoint *)targetContentOffset {
int cellHeight = 41;
*targetContentOffset = CGPointMake(targetContentOffset->x,
targetContentOffset->y - (((int)targetContentOffset->y) % cellHeight));
}
Metoda ta jest wywoływana, gdy użytkownik porusza się na TableView
powiadomić aplikację. targetContentOffset
to zmienna inout
, dzięki czemu można ustawić końcową pozycję przewijania, podczas gdy animacja jest kontynuowana. Korzystając z prawa cellHeight
, twoje TableView
zawsze będzie przyciągało do komórek.
Dzięki za pokazanie, jak używać zmiennej 'inout'. Bardzo fajna funkcja! – Besi
+1 Dziękuję również, wskazując na zmienną "inout". – jpswain
Z matmy - nigdy nie można przewinąć do ostatniego rzędu w tabeli ... nie jest to jednak problem. - zdecydowanie najlepsze rozwiązanie. – scottbates22