滑动UITableViewCell出现多个按钮
2016-06-29 11:34
525 查看
iOS > = 5.0使用第三方效果图
iOS> = 8.0使用系统方法效果图
MGSwipeTableCell(Github上的三方库)- iOS >= 5.0
直接使用比较简单 通过代码看一下首先签这个协议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 ++) { // 按钮提供了几个方法, 可以点进去看一看 MGSwipeButton *btn = [MGSwipeButton buttonWithTitle:@"" backgroundColor:colors[i] padding:15 callback:^BOOL(MGSwipeTableCell *sender) { return YES; }]; // 把按钮加到数组中 [result addObject:btn]; } return result; }
添加右边按钮的方法
- (NSArray *)btnRightCount:(int)count { NSMutableArray *result = [NSMutableArray array]; NSArray *titleArray = @[@"删除", @"标记未读"]; 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; }]; // 把按钮加到数组中 [result addObject:btn]; } return result; }
重用池可以这样写
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *cellID = @"cellId"; // 这里如果MGSwipeTableCell是足够你使用的, 你可以直接使用 // 或者自定义创建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: 只有单个可以滑动 , YES: 多个可以滑动 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]; } }
按钮的点击代理方法
-(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"); // 这里简单的做了个删除操作 NSIndexPath * path = [_tableView indexPathForCell:cell]; [_arrayTest removeObjectAtIndex:path.row]; [_tableView deleteRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationLeft]; return NO; }else{ NSLog(@"left ------- 1"); } break; } } return YES; }
iOS8 之后也提供了类似的实现
- (NSArray *)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]; }
相关文章推荐
- DC/OS GUI 安装指南
- 将控件置于最上层 UITextView 限制行数 iOS 新手笔记
- iOS学习之GCD 信号量详解,dispatch_semaphore、NSOperationQueue
- 奇怪的异常 Process 'command '---.exe'' finished with non-zero exit value 2
- 只有在配置文件或 Page 指令中将 enableSessionState 设置为 true 时,才能使用会话状态。还请确保在应用程序配置的 // 节中包括 System.Web.SessionSta
- 提示:413 Request Entity Too Large 的解决方法
- UITableView根据section设置右侧索引
- 【UI】【View】View事件分发(一)
- 【Leetcode】Count Numbers with Unique Digits
- UIAlertController的使用
- 大学生没技能没经验就业难,多亏传智播客UI设计
- three.js学习笔记 dat.gui.js和stats.js
- “只能在UI主线程更新View”这件小事,android ui
- fuel8: 在vmware中记得配置混杂模式
- UITableViewCell的显示错误
- Facebook开源的基于SQL的操作系统检测和监控框架:osquery Table详解
- PHP截取用UEditor编辑器保存在数据库的文章乱码和包含HTML标签的问题
- JS魔法堂:被玩坏的innerHTML、innerText、textContent和value属性
- 灵活且强大的RecyclerViewAdapter源码分析
- android ui界面设计开发demo-智慧社区ui设计展示