2009-10-19 4 views
56

Я подклассифицировал UITableView (как KRTableView) и реализовал четыре сенсорных метода (touchsBegan, touchesEnded, touchhesMoved и touchsCancelled), чтобы я мог обнаружить, когда обрабатывается сенсорное событие в UITableView , По сути, мне нужно обнаружить, когда 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 прокрутки вверх или вниз?

ответ

142

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

+0

viewDidScroll будет держать называют до тех пор, пока вы прокрутки. Таким образом, вы не можете установить переменную isDragging в galse в scrollViewDidScroll. –

+0

МОЖЕТ ЛИ ВОЗНИКАТЬ МЕЖДУ ПРОСМОТРЕТЬ ПРОСМОТРЕТЬ ИЛИ ВНИЗ? – Markus

+0

@Markus https://stackoverflow.com/questions/2543670/finding-the-direction-of-scrolling-in-a-uiscrollview – tdios

38

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

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

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

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

1

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

[mytableview reloadData];

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

Смежные вопросы