У меня есть табличное представление, и всякий раз, когда я пролистываю строку в разделе A и после этого выбираю строку в разделе B, он думает, что я выбрал строку прокрутки в разделе A! Я установил точку останова для проверки и на 100% уверен, что он думает, что это именно та ячейка И что она вызывает ее, когда я выбираю строку в разделе B.
Под проведением пальца я подразумеваю, что вы помещаете палец в какую-то часть ячейки, затем перетаскиваете ее (влево или вправо, не имеет значения) и затем отпускаете. Это не вызывает didSelectRowAtIndexPath, так как это не тап.
Пример:
Проведите по указателю A.1
Нажмите на указательный путь B.4
ОС вызывает tableView: didSelectRowAtIndexPath: A.1
Я что-то не так делаю? Что может пойти не так?
Полный код, который обрабатывает прикосновения в определенных ячейках:
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
RDLogString(@"(%p) Received touches began", self);
moveCount = 0;
UITouch * touch = [touches anyObject];
touchBegin = [touch locationInView: nil];
[[self nextResponder] touchesBegan: touches withEvent: event];
}
- (void) touchesMoved: (NSSet * const)touches withEvent:(UIEvent * const)event {
RDLogString(@"(%p) Received touches moved", self);
moveCount++;
[[self nextResponder] touchesMoved: touches withEvent: event];
}
- (void) touchesEnded: (NSSet * const)touches withEvent:(UIEvent * const)event {
RDLogString(@"(%p) Received touches ended", self);
if(![self checkUserSwipedWithTouches: touches]){
[[self nextResponder] touchesEnded: touches withEvent: event];
}
}
- (BOOL) checkUserSwipedWithTouches: (NSSet * const) touches {
CGPoint touchEnd = [[touches anyObject] locationInView: nil];
NSInteger distance = touchBegin.x - touchEnd.x;
// This code shows an animation if the user swiped
if(distance > SWIPED_HORIZONTAL_THRESHOLD){
[self userSwipedRightToLeft: YES];
return YES;
} else if (distance < (-SWIPED_HORIZONTAL_THRESHOLD)) {
[self userSwipedRightToLeft: NO];
return YES;
}
return NO;
}