Обнаружение прокрутки 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 прокручивается вверх или вниз?

583   3  

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

    Ничего не найдено.