標籤:
首先在 UITableViewCell.h 中聲明一個代理
@protocol UITableViewCellSlideDelegate <UITableViewDelegate>@optional- (void)tableView:(UITableView *)tableView slideToRightWithIndexPath:(NSIndexPath *)indexPath;- (void)tableView:(UITableView *)tableView slideToLeftWithIndexPath:(NSIndexPath *)indexPath;@end
然後在 UITableViewCell.m 中 建立一個手勢 UIPanGestureRecognizer,因為我們左右滑動的時候必須依賴拖動手勢,然後在 UIPanGestureRecognizer 的代理方法中進行判斷到底是左滑還是右滑
static const CGFloat kSlideWidth = 80;static const CGFloat kSlideWidthDelta = 0.08;#pragma mark - UIGestureRecognizerDelegate- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{ if (self.panGestureRecognizer == gestureRecognizer) { CGPoint point = [self.panGestureRecognizer translationInView:self]; return fabs(point.x) > fabs(point.y); } else { return NO; }}#pragma mark - Event Handler- (void)panGestureRecognizerHandler:(UIPanGestureRecognizer *)gestureRecognizer{ switch (gestureRecognizer.state) { case UIGestureRecognizerStateChanged: { CGPoint point = [gestureRecognizer translationInView:self]; CGFloat offset = point.x; if (offset >= kSlideWidth) { offset = kSlideWidth + (offset - kSlideWidth) * kSlideWidthDelta; if (_parent.delegate && [_parent.delegate respondsToSelector:@selector(tableView:slideToRightWithIndexPath:)]) { id<UITableViewCellSlideDelegate> delgate = (id<UITableViewCellSlideDelegate>)_parent.delegate; [delgate tableView:_parent slideToRightWithIndexPath:_indexPath]; } } else if (offset <= -kSlideWidth) { offset = -kSlideWidth + (offset + kSlideWidth) * kSlideWidthDelta; if (_parent.delegate && [_parent.delegate respondsToSelector:@selector(tableView:slideToLeftWithIndexPath:)]) { id<UITableViewCellSlideDelegate> delgate = (id<UITableViewCellSlideDelegate>)_parent.delegate; [delgate tableView:_parent slideToLeftWithIndexPath:_indexPath]; } } self.contentView.center = CGPointMake(self.center.x + offset, self.contentView.center.y); break; } default: break; }}
最後就可以在外部調用代理方法進行相關的操作了
#pragma mark - UITableViewCellSlideDelegate- (void)tableView:(UITableView *)tableView slideToRightWithIndexPath:(NSIndexPath *)indexPath{ NSLog(@"向右滑動");}- (void)tableView:(UITableView *)tableView slideToLeftWithIndexPath:(NSIndexPath *)indexPath{ NSLog(@"向左滑動");}
iOS之UITableViewCell左右滑動效果