Как я могу заставить scrollViewDidScrollToTop работать в UITableView? - PullRequest
4 голосов
/ 22 января 2010

Я думаю, что название объясняет все это.Я хочу получать уведомления, когда пользователь прокручивает верхнюю часть таблицы.

Я безуспешно попробовал следующее и даже добавил UIScrollViewDelegate в файл .h.

- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView{
    NSLog(@"ScrolledToTop");
}

Спасибо!

Редактировать : я могу заставить его позвонить, если нажать на строку состояния.Но нет, если я прокручиваю наверх.Странно ... может ли это быть как-то связано с подпрыгиванием табличного представления, когда оно достигает вершины?

Ответы [ 5 ]

18 голосов
/ 22 января 2010

Что произойдет, если вы попробуете это?

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    if (scrollView.contentOffset.y == 0)
        NSLog(@"At the top");
}
2 голосов
/ 22 января 2010
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {

if (indexPath.row == 0 && indexPath.section == 0 ) {
    NSLog(@"Showing top cell");

}

Это достаточно близко?

1 голос
/ 29 марта 2015

Метод делегата func scrollViewDidScroll(_ scrollView: UIScrollView) сделает свое дело, но он вызывается каждый раз, когда представление прокрутки перемещает точку. Менее гиперактивный альтернатива может быть такой:

func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>){
    if targetContentOffset.memory.y == 0.0 {
       println("Reached the Top")
}

Он позволяет делегату знать, что scrollView достигнет вершины, прежде чем он на самом деле туда попадет, и, поскольку targetContentOffset является указателем, вы можете изменить его значение, чтобы настроить, где представление прокрутки заканчивает анимацию прокрутки.

0 голосов
/ 30 августа 2016

Сделайте это в Swift:

func scrollViewDidScroll(scrollView: UIScrollView) {
    print(scrollView.contentOffset.y) 
}
0 голосов
/ 20 июля 2016

Еще две опции, которые могут быть проще в зависимости от вашей ситуации:

Во-первых, если вы пытаетесь обнаружить результат только анимации , вызванной либо анимацией contentOffset самостоятельно, либо вызовом UITableView scrollToRowAtIndexPath:, или UICollectionView scrollToItemAtIndexPath:, агрегат

-(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
    // You're now at the end of the scrolling animation
}

Это не будет вызываться после ручной прокрутки пальцем, что иногда может быть полезным, а может и не быть полезным.

Во-вторых, если вы пытаетесь сделать что-то вроде бесконечной прокрутки, где вы обновляете список, когда попадаете в верхнюю часть, или загружаете другую страницу результатов, когда вы попадаете в нижнюю часть, простой способ сделать это просто используйте сделать вызов в вашем источнике данных cellForRowAtIndexPath:, что может избавить вас от необходимости реализовывать делегат все вместе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...