Подтвердить что ты не робот

Обнаружение прокрутки UITableView

Я подклассифицировал UITableView (как KRTableView) и реализовал четыре сенсорных метода (touchsBegan, touchsEnded, touchhesMoved и touchsCancelled), чтобы я мог обнаружить, когда обрабатывается сенсорное событие в UITableView. По сути, мне нужно обнаружить, когда UITableView прокручивается вверх или вниз.

Однако подклассификация UITableView и создание указанных выше методов обнаруживает только при прокрутке или перемещении пальцев в UITableViewCell, а не во всем UITableView.

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

Вот как я подклассифицирую UITableView:

#import "KRTableView.h"


@implementation KRTableView

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [super touchesBegan:touches withEvent:event];   
    NSLog(@"touches began...");
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    [super touchesMoved:touches withEvent:event];
  NSLog(@"touchesMoved occured");   
}

- (void)touchesCancelled:(NSSet*)touches withEvent:(UIEvent *)event {
    [super touchesCancelled:touches withEvent:event];
  NSLog(@"touchesCancelled occured");   
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
  [super touchesEnded:touches withEvent:event];
  NSLog(@"A tap was detected on KRTableView");
}

@end

Как я могу определить, когда UITableView прокручивается вверх или вниз?

4b9b3361

Ответ 1

Вам не нужно перехватывать методы событий. Проверьте документы для протокола UIScrollViewDelegate и примените методы -scrollViewDidScroll: или -scrollViewWillBeginDragging: в соответствии с вашей ситуацией.

Ответ 2

Я хотел бы добавить следующее:

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

Протокол UITableViewDelegate соответствует UIScrollViewDelegate, поэтому все, что вам нужно сделать, это реализовать методы -scrollViewWillBeginDragging и -scrollViewDidScroll непосредственно в вашей реализации UITableViewDelegate, и они будут вызываться автоматически, если класс реализации установлен как делегированный вашему UITableView.

Если вы также хотите перехватывать клики в своей таблице, а не только перетаскивать и прокручивать, вы можете расширить и реализовать свой собственный UITableViewCell и использовать методы touchhesBegan: там. Объединив эти два метода, вы сможете выполнять большинство вещей, которые вам нужны, когда пользователь взаимодействует с UITableView.

Ответ 3

Это была моя ошибка, я попытался вызвать метод до перезагрузки tableview. Следующий код помог мне решить эту проблему.

[mytableview reloadData];

[mytableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:btn.tag-1] atScrollPosition:UITableViewScrollPositionTop animated:YES];