Ответ 1
Вам не нужно перехватывать методы событий. Проверьте документы для протокола UIScrollViewDelegate
и примените методы -scrollViewDidScroll:
или -scrollViewWillBeginDragging:
в соответствии с вашей ситуацией.
Я подклассифицировал 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 прокручивается вверх или вниз?
Вам не нужно перехватывать методы событий. Проверьте документы для протокола UIScrollViewDelegate
и примените методы -scrollViewDidScroll:
или -scrollViewWillBeginDragging:
в соответствии с вашей ситуацией.
Я хотел бы добавить следующее:
Если вы работаете с UITableView
, скорее всего, вы уже внедряете UITableViewDelegate
, чтобы заполнить таблицу данными.
Протокол UITableViewDelegate соответствует UIScrollViewDelegate, поэтому все, что вам нужно сделать, это реализовать методы -scrollViewWillBeginDragging
и -scrollViewDidScroll
непосредственно в вашей реализации UITableViewDelegate, и они будут вызываться автоматически, если класс реализации установлен как делегированный вашему UITableView.
Если вы также хотите перехватывать клики в своей таблице, а не только перетаскивать и прокручивать, вы можете расширить и реализовать свой собственный UITableViewCell и использовать методы touchhesBegan: там. Объединив эти два метода, вы сможете выполнять большинство вещей, которые вам нужны, когда пользователь взаимодействует с UITableView.
Это была моя ошибка, я попытался вызвать метод до перезагрузки tableview. Следующий код помог мне решить эту проблему.
[mytableview reloadData];
[mytableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:btn.tag-1] atScrollPosition:UITableViewScrollPositionTop animated:YES];