UITableView
наследуется от UIScrollView
, и вы можете сделать это, используя методы UIScrollViewDelegate
и свойство табличного представления indexPathsForVisibleRows
, чтобы проверить, какие пути индекса ячеек видны в момент остановки прокрутки.
Вы даже можете сохранить начальную позицию, с которой началось замедление, чтобы можно было рассчитать, было ли направление прокрутки вверх или вниз, что позволит вам узнать, является ли ячейка, на которой она остановится, первой или последней извидимые.
int startDeceleratingPosition;
-(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView {
startDeceleratingPosition = scrollView.contentOffset.y;
}
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
BOOL isPositionUp = startDeceleratingPosition < scrollView.contentOffset.y;
NSArray *paths = [_myTableview indexPathsForVisibleRows];
UITableViewCell *cell;
if(isPositionUp){
cell = [_myTableview cellForRowAtIndexPath:[paths objectAtIndex:0]];
} else {
cell = [_myTableview cellForRowAtIndexPath:[paths lastObject]];
}
}
Важное замечание о приведенном выше коде состоит в том, что он указывает на табличное представление как переменную _myTableview
вместо простого преобразования переменной метода делегата scrollView
в UITableView *
, хотя это только детали реализации и не должно влиять на логику здесь.