Я пытаюсь получить мои клетки перелистываемой с gestureRecognizer:GestureRecognizer работает только на одной клетке
- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell Identifier";
self.cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier];
// Fetch Bookmark
NSDictionary *bookmark = [self.bookmarks objectAtIndex:indexPath.row];
// Configure Cell
self.cell.textLabel.numberOfLines = 0;
self.cell.textLabel.lineBreakMode = NSLineBreakByWordWrapping;
self.cell.textLabel.text = [bookmark objectForKey:@"name"];
self.cell.detailTextLabel.text = [bookmark objectForKey:@"url"];
//Swipe recognizer
UIGestureRecognizer* recognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
[self.cell addGestureRecognizer:recognizer];
return self.cell;
}
И у меня есть те методы, которые, как предполагается, чтобы мои клетки двигаться, но и вернуться в исходное положение, когда Я отпускаю сенсорный жест:
-(BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer {
CGPoint translation = [gestureRecognizer translationInView:self.cell];
// Check for horizontal gesture
if (fabsf(translation.x) > fabsf(translation.y)) {
return YES;
}
return NO;
}
-(void)handlePan:(UIPanGestureRecognizer *)recognizer {
// 1
if (recognizer.state == UIGestureRecognizerStateBegan) {
// if the gesture has just started, record the current centre location
_originalCenter = self.cell.center;
}
// 2
if (recognizer.state == UIGestureRecognizerStateChanged) {
// translate the center
CGPoint translation = [recognizer translationInView:self.cell];
self.cell.center = CGPointMake(_originalCenter.x + translation.x, _originalCenter.y);
// determine whether the item has been dragged far enough to initiate a delete/complete
_deleteOnDragRelease = self.cell.frame.origin.x < -self.cell.frame.size.width/2;
}
// 3
if (recognizer.state == UIGestureRecognizerStateEnded) {
// the frame this cell would have had before being dragged
CGRect originalFrame = CGRectMake(0, self.cell.frame.origin.y,
self.cell.bounds.size.width, self.cell.bounds.size.height);
if (!_deleteOnDragRelease) {
// if the item is not being deleted, snap back to the original location
[UIView animateWithDuration:0.2
animations:^{
self.cell.frame = originalFrame;
}
];
}
}
}
сам жест работает правильно, но я могу только красть последнюю ячейку и, когда я прокручиваю мой UITableView
она становится первой ячейкой, что я могу ударить.
Вы видели, откуда могла произойти ошибка?