首先在 UITableViewCell.h 中声明一个代理
@optional
- ( void )tableView:( UITableView *)tableView slideToRightWithIndexPath:( NSIndexPath *)indexPath;
- ( void )tableView:( UITableView *)tableView slideToLeftWithIndexPath:( NSIndexPath *)indexPath;
- ( void )tableView:( UITableView *)tableView slideToRightWithIndexPath:( NSIndexPath *)indexPath;
- ( void )tableView:( UITableView *)tableView slideToLeftWithIndexPath:( NSIndexPath *)indexPath;
@end
.h
@property
(
nonatomic
,
strong
)
UIPanGestureRecognizer
*panGestureRecognizer;
@property ( nonatomic , weak ) UITableView *parent;
@property ( nonatomic , weak ) UITableView *parent;
@property
(
nonatomic
,
strong
)
NSIndexPath
*indexPath;
.m
在自定义cell中添加手势
self
.
panGestureRecognizer
= [[
UIPanGestureRecognizer
alloc
]
initWithTarget
:
self
action
:
@selector
(panGestureRecognizerHandler:)];
[selfaddGestureRecognizer:_panGestureRecognizer];
#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 ;
}
}
- ( 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 ;
}
}
最后就可以在外部调用代理方法进行相关的操作了
在cell中签代理
cell.
parent
=
self
.
table
;
#pragma mark - UITableViewCellSlideDelegate
- ( void )tableView:( UITableView *)tableView slideToRightWithIndexPath:( NSIndexPath *)indexPath
{
NSLog ( @" 向右滑动 " );
}
- ( void )tableView:( UITableView *)tableView slideToLeftWithIndexPath:( NSIndexPath *)indexPath
{
NSLog ( @" 向左滑动 " );
}
- ( void )tableView:( UITableView *)tableView slideToRightWithIndexPath:( NSIndexPath *)indexPath
{
NSLog ( @" 向右滑动 " );
}
- ( void )tableView:( UITableView *)tableView slideToLeftWithIndexPath:( NSIndexPath *)indexPath
{
NSLog ( @" 向左滑动 " );
}