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