前言: 本篇博客其實(shí)就是想介紹tableviewcell滑動(dòng)的一些"事", 昨天在逛github的時(shí)候看到的還挺有意思的三方庫, , 簡(jiǎn)單用了一下感覺不錯(cuò), 一作為記錄, 二是希望有類似需求的可以得到幫助.
Demo 入口 有幫助 請(qǐng)Star----
本篇介紹了 iOS5之后(使用三方庫) iOS8之后(系統(tǒng)方法)分別的實(shí)現(xiàn)方式
效果圖 - ios>= 5.0
效果圖 - ios>= 8.0
MGSwipeTableCell(Github上的三方庫)- iOS >= 5.0
直接使用比較簡(jiǎn)單 通過代碼看一下
首先簽這個(gè)協(xié)議MGSwipeTableCellDelegate
添加左邊按鈕方法
- (NSArray *)btnLeftCount:(int)count
{
NSMutableArray *result = [NSMutableArray array];
UIColor *colors[3] = {[UIColor greenColor],
[UIColor colorWithRed:0 green:0x99/255.0 blue:0xcc/255.0 alpha:1.0],
[UIColor colorWithRed:0.59 green:0.29 blue:0.08 alpha:1.0]};;
for (int i = 0; i < count; i ++) {
// 按鈕提供了幾個(gè)方法, 可以點(diǎn)進(jìn)去看一看
MGSwipeButton *btn = [MGSwipeButton buttonWithTitle:@"" backgroundColor:colors[i] padding:15 callback:^BOOL(MGSwipeTableCell *sender) {
return YES;
}];
// 把按鈕加到數(shù)組中
[result addObject:btn];
}
return result;
}
添加右邊按鈕的方法
- (NSArray *)btnRightCount:(int)count
{
NSMutableArray *result = [NSMutableArray array];
NSArray *titleArray = @[@"刪除", @"標(biāo)記未讀"];
UIColor *color[2] = {[UIColor redColor], [UIColor lightGrayColor]};
for (int i = 0; i < count; i ++) {
MGSwipeButton *btn = [MGSwipeButton buttonWithTitle:titleArray[i] backgroundColor:color[i] padding:15 callback:^BOOL(MGSwipeTableCell *sender) {
BOOL autoHide = i != 0;
return autoHide;
}];
// 把按鈕加到數(shù)組中
[result addObject:btn];
}
return result;
}
重用池可以這樣寫
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellID = @"cellId";
// 這里如果MGSwipeTableCell是足夠你使用的, 你可以直接使用
// 或者自定義創(chuàng)建cell繼承于MGSwipeTableCell, 像我下面代碼這樣
XTCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
if (!cell) {
cell = [[XTCustomCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellID];
}
cell.label.text = [NSString stringWithFormat:@"%ld------%@", (long)indexPath.row, self.arrayTest[indexPath.row]];
cell.label.font = [UIFont systemFontOfSize:20];
// 指定代理人
cell.delegate = self;
// NO: 只有單個(gè)可以滑動(dòng) , YES: 多個(gè)可以滑動(dòng)
cell.allowsMultipleSwipe = NO;
return cell;
}
添加按鈕
-(NSArray*) swipeTableCell:(MGSwipeTableCell*) cell swipeButtonsForDirection:(MGSwipeDirection)direction
swipeSettings:(MGSwipeSettings*) swipeSettings expansionSettings:(MGSwipeExpansionSettings*) expansionSettings;
{
if (direction == MGSwipeDirectionRightToLeft) {
return [self btnRightCount:2];
}
else {
return [self btnLeftCount:3];
}
}
按鈕的點(diǎn)擊代理方法
-(BOOL) swipeTableCell:(MGSwipeTableCell*) cell tappedButtonAtIndex:(NSInteger) index direction:(MGSwipeDirection)direction fromExpansion:(BOOL) fromExpansion
{
switch (direction) {
case MGSwipeDirectionLeftToRight: {
if (index == 0) {
NSLog(@"right ------- 0");
}else{
NSLog(@"right ------- 1");
}
break;
}
case MGSwipeDirectionRightToLeft: {
if (index == 0) {
NSLog(@"left ------- 0");
// 這里簡(jiǎn)單的做了個(gè)刪除操作
NSIndexPath * path = [_tableView indexPathForCell:cell];
[_arrayTest removeObjectAtIndex:path.row];
[_tableView deleteRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationLeft];
return NO;
}else{
NSLog(@"left ------- 1");
}
break;
}
}
return YES;
}
iOS8 之后也提供了類似的實(shí)現(xiàn)
- (NSArray<UITableViewRowAction *> *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewRowAction *deleteRowAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDestructive title:@"刪除" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {
[self.arrayTest removeObjectAtIndex:indexPath.row];
[self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
}];
UITableViewRowAction *topRowAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"置頂" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {
[self.arrayTest exchangeObjectAtIndex:indexPath.row withObjectAtIndex:0];
NSIndexPath *firstIndexPath = [NSIndexPath indexPathForRow:0 inSection:indexPath.section];
[tableView moveRowAtIndexPath:indexPath toIndexPath:firstIndexPath];
}];
topRowAction.backgroundColor = [UIColor blueColor];
UITableViewRowAction *moreRowAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title:@"更多" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {
[self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationMiddle];
}];
return @[deleteRowAction,topRowAction,moreRowAction];
}