只需一个手势滑动即可删除单元格
Posted
技术标签:
【中文标题】只需一个手势滑动即可删除单元格【英文标题】:Swipe to delete cell by only one gesture 【发布时间】:2016-02-15 12:38:20 【问题描述】:我想通过一个滑动手势删除单元格。问题是当我向左滑动时会出现删除图标。当然,当我单击删除图标时,单元格将被删除。我想在滑动手势后立即删除单元格。 ios 9 支持吗?
更多详情 当用户向左滑动到中间的单元格时会出现删除按钮。当他继续滑动到屏幕边缘时,单元格将被删除。
【问题讨论】:
你能把你的问题解释清楚吗? @user3182143 我更新了我的问题。 【参考方案1】:为什么没有自定义表格单元格
在单元格上,在内容视图或任何部分添加滑动手势,
使用索引路径将其调用委托给 tableviewcontroller
- (void)someDelegateFunctionToDeleteCellAtIndexPath:(NSIndexpath *)indexPath
[dataSourceArray removeObjectAtIndex:indexPath.row];
NSArray *deleteIndexPaths = @[indexPath];
[tableView beginUpdates];
[tableView deleteRowsAtIndexPaths:deleteIndexPaths withRowAnimation:UITableViewRowAnimationFade];
[tableView endUpdates];
【讨论】:
【参考方案2】:在 UITableView 上使用 UISwipeGesture:
- (void)viewDidLoad
[super viewDidLoad];
UISwipeGestureRecognizer *recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:sel
action:@selector(leftSwipe:)];
[recognizer setDirection:(UISwipeGestureRecognizerDirectionLeft)];
[self.tableView addGestureRecognizer:recognizer];
- (void)leftSwipe:(UISwipeGestureRecognizer *)gestureRecognizer
CGPoint location = [gestureRecognizer locationInView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:location];
[dataSourceArray removeObjectAtIndex:indexPath.row];
[tableView reloadData];
【讨论】:
【参考方案3】:我为您的问题尝试了解决方案。我很容易得到解决方案。
.m
#import "ViewController.h"
@interface ViewController ()
NSMutableArray *arrayData;
@end
@implementation ViewController
@synthesize tableViewSwipeDelete;
- (void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
arrayData = [[NSMutableArray alloc]initWithObjects:@"iOS",@"android",@"Windows",@"Tablet",@"iPAD", nil];
UISwipeGestureRecognizer *gestureDeleteRow = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(cellSwipe:)];
gestureDeleteRow.direction = UISwipeGestureRecognizerDirectionLeft;
[tableViewSwipeDelete addGestureRecognizer:gestureDeleteRow];
-(void)cellSwipe:(UISwipeGestureRecognizer *)gesture
CGPoint location = [gesture locationInView:tableViewSwipeDelete];
NSIndexPath *swipedIndexPath = [tableViewSwipeDelete indexPathForRowAtPoint:location];
//Delete Row…
[arrayData removeObjectAtIndex:swipedIndexPath.row];
[tableViewSwipeDelete deleteRowsAtIndexPaths:[NSArray arrayWithObjects:swipedIndexPath, nil] withRowAnimation:UITableViewRowAnimationLeft];
- (void)didReceiveMemoryWarning
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
return arrayData.count;
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *strCell = @"cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:strCell];
if(cell==nil)
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:strCell];
cell.textLabel.text = arrayData[indexPath.row];
return cell;
@end
以上我的回答完美。
【讨论】:
以上是关于只需一个手势滑动即可删除单元格的主要内容,如果未能解决你的问题,请参考以下文章
处理 UICollectionView 单元格上的滑动:在 UICollectionView 或每个单元格上实现处理程序?