之前想在cell左滑的时候添加更多的按钮而不是只有‘删除’按钮如下所示,貌似不是一件简单的事。但是现在只要实现几个方法就行了。

代码写的比较垃圾,重在理解这个知识。。

具体代码:

//

//  TableViewController.m

//  ios8_tableview(左滑添加按钮)

//

//  Created by mudy on 15/8/21.

//  Copyright (c) 2015年 mudy. All rights reserved.

//

#import "TableViewController.h"

@interface TableViewController ()

@property (nonatomic,strong)NSMutableArray *dataSource;

@end

@implementation TableViewController

- (void)viewDidLoad {

[super viewDidLoad];

self.dataSource = [NSMutableArray array];

self.dataSource = [@[@"mudy1",@"mudy2",@"mudy3",@"mudy4",@"mudy5",@"mudy6"]mutableCopy];

// Uncomment the following line to preserve selection between presentations.

// self.clearsSelectionOnViewWillAppear = NO;

// Uncomment the following line to display an Edit button in the navigation bar for this view controller.

self.navigationItem.rightBarButtonItem = self.editButtonItem;

self.refreshControl = [UIRefreshControl new];

self.refreshControl.tintColor = [UIColor redColor];

[self.refreshControl addTarget:self action:@selector(refreshControl:) forControlEvents:UIControlEventValueChanged];

UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]

initWithTarget:self action:@selector(longPressGestureRecognized:)];

[self.tableView addGestureRecognizer:longPress];

}

- (IBAction)longPressGestureRecognized:(UILongPressGestureRecognizer *)sender {

UILongPressGestureRecognizer *longPress = (UILongPressGestureRecognizer *)sender;

UIGestureRecognizerState state = longPress.state;

CGPoint location = [longPress locationInView:self.tableView];

NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:location];

static UIView       *snapshot = nil;        ///< A snapshot of the row user is moving.

static NSIndexPath  *sourceIndexPath = nil; ///< Initial index path, where gesture begins.

switch (state) {

case UIGestureRecognizerStateBegan: {

if (indexPath) {

sourceIndexPath = indexPath;

UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];

// Take a snapshot of the selected row using helper method.

snapshot = [self customSnapshotFromView:cell];

// Add the snapshot as subview, centered at cell's center...

__block CGPoint center = cell.center;

snapshot.center = center;

snapshot.alpha = 0.0;

[self.tableView addSubview:snapshot];

[UIView animateWithDuration:0.25 animations:^{

// Offset for gesture location.

center.y = location.y;

snapshot.center = center;

snapshot.transform = CGAffineTransformMakeScale(1.05, 1.05);

snapshot.alpha = 0.98;

// Black out.

cell.backgroundColor = [UIColor blackColor];

} completion:nil];

}

break;

}

case UIGestureRecognizerStateChanged: {

CGPoint center = snapshot.center;

center.y = location.y;

snapshot.center = center;

// Is destination valid and is it different from source?

if (indexPath && ![indexPath isEqual:sourceIndexPath]) {

// ... update data source.

[self.dataSource exchangeObjectAtIndex:indexPath.row withObjectAtIndex:sourceIndexPath.row];

// ... move the rows.

[self.tableView moveRowAtIndexPath:sourceIndexPath toIndexPath:indexPath];

// ... and update source so it is in sync with UI changes.

sourceIndexPath = indexPath;

}

break;

}

default: {

// Clean up.

UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:sourceIndexPath];

[UIView animateWithDuration:0.25 animations:^{

snapshot.center = cell.center;

snapshot.transform = CGAffineTransformIdentity;

snapshot.alpha = 0.0;

// Undo the black-out effect we did.

cell.backgroundColor = [UIColor whiteColor];

} completion:^(BOOL finished) {

[snapshot removeFromSuperview];

snapshot = nil;

}];

sourceIndexPath = nil;

break;

}

}

}

- (UIView *)customSnapshotFromView:(UIView *)inputView {

UIView *snapshot = [inputView snapshotViewAfterScreenUpdates:YES];

snapshot.layer.masksToBounds = NO;

snapshot.layer.cornerRadius = 0.0;

snapshot.layer.shadowOffset = CGSizeMake(-1.0, 0.0);

snapshot.layer.shadowRadius = 1.0;

snapshot.layer.shadowOpacity = 0.4;

return snapshot;

}

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

-(void)refreshControl:(id)sender{

[NSThread sleepForTimeInterval:5.0];//刷新5秒钟

self.refreshControl.attributedTitle = [[NSAttributedString alloc]initWithString:@"刷新ing"];

[self.tableView reloadData];

[self.refreshControl endRefreshing];

NSLog(@"really?");

}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

// Return the number of sections.

return 1;

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

// Return the number of rows in the section.

return self.dataSource.count;

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];

cell.textLabel.text = [NSString stringWithFormat:@"%@",self.dataSource[indexPath.row]];

// Configure the cell...

return cell;

}

// Override to support conditional editing of the table view.

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {

// Return NO if you do not want the specified item to be editable.

return YES;

}

// Override to support editing the table view.

//这个方法并没有走,但是也不能删掉这个方法

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {

if (editingStyle == UITableViewCellEditingStyleDelete) {

} else if (editingStyle == UITableViewCellEditingStyleInsert) {

// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view

}

}

-(NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath{

//设置删除按钮

UITableViewRowAction *deleteRowAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDestructive title:@"删除" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {

//要先删除数据源里的数据

[self.dataSource removeObjectAtIndex:indexPath.row];

[self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];

UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"删除" message:@"删除成功" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];

[alertView show];

}];

//设置收藏按钮

UITableViewRowAction *collection = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"收藏" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {

UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"收藏" message:@"收藏成功" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];

[alertView show];

[self.tableView reloadData];

}];

//设置置顶按钮

UITableViewRowAction *topRowAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"置顶" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {

topRowAction.backgroundColor = [UIColor yellowColor];

[self.dataSource exchangeObjectAtIndex:indexPath.row withObjectAtIndex:0];

NSIndexPath *first = [NSIndexPath indexPathForRow:0 inSection:indexPath.section];

//        NSIndexPath *f =[NSIndexPath inde]

[tableView moveRowAtIndexPath:indexPath toIndexPath:first];

}];

deleteRowAction.backgroundEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];

topRowAction.backgroundColor = [UIColor blueColor];

deleteRowAction.backgroundColor = [UIColor grayColor];

collection.backgroundColor = [UIColor brownColor];

return @[deleteRowAction,collection,topRowAction];

}

// Override to support rearranging the table view.

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {

[tableView moveRowAtIndexPath:fromIndexPath toIndexPath:toIndexPath];

}

// Override to support conditional rearranging of the table view.

- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {

// Return NO if you do not want the item to be re-orderable.

return YES;

}

/*

#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

// Get the new view controller using [segue destinationViewController].

// Pass the selected object to the new view controller.

}

*/

@end

UITableViewCell左滑的时候添加多个按钮的方法(iOS8+)以及UIRefreshControl(iOS6+)的使用。的更多相关文章

  1. UITableViewCell 左滑删除

    - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { return Y ...

  2. 使用zepto实现QQ消息左滑删除效果

    有这样一个需求: 1. 有一个列表,将每一个列表项左滑动出现删除按钮: 2. 右滑动隐藏删除按钮: 3. 点击这个删除按钮删除该列表项. 完成以后的效果: 这是微信网页端的页面,使用的是 zepto ...

  3. 三种方法为QLineEdit添加清除内容按钮

    很多时候我们会发现输入的一长串内容不得不全部删除重新输入,这时比起一直按着退格键不放一个清除内容按钮更受欢迎. 今天我将介绍三种为QLineEdit添加清除内容按钮的方法,其中两种方法有较强的功能针对 ...

  4. UITableView 编辑模式(增加-删除-移动---自定义左滑 title)

    - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typica ...

  5. UITableView 编辑模式(增加-删除-移动---自定义左滑 title) xib cell

    参考:  http://www.open-open.com/lib/view/open1430008922468.html - (void)viewDidLoad { [super viewDidLo ...

  6. [Xcode 实际操作]五、使用表格-(9)删除UITableView单元格(手势左滑调出删除按钮)

    目录:[Swift]Xcode实际操作 本文将演示如何删除某一行单元格.手势左滑调出删除按钮. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIK ...

  7. ionic ios 左滑 白屏

    之前发现ionic在发布ios之后,左滑屏幕的时候会出现界面变白,但是画面原有的位置点击还是有效的,但是点击之后界面是不正确的,返回到上上一步 然后查找资料发现是ios系统内置的左滑动作造成了影响,修 ...

  8. iOS开发——UI进阶篇(四)tableView的全局刷新,局部刷新,左滑操作,左滑出现更多按钮,进入编辑模式,批量删除,自定义批量删除

    首先创建项目,在storyboard如下布局控件,设置好约束 然后创建cell模型类XMGWineCell数据模型类XMGWine创建UITableView,设置数据源协议,实现数据源方法懒加载数据这 ...

  9. js高仿QQ消息列表左滑功能

    该组件,主要功能类似于QQ消息列表左滑出现删除.标为已读等按钮的功能:现在的版本用的是纯javaScript编写:后续会跟进 angularJs 开发的类似组件以及jquery的; 下面,就让我们来认 ...

随机推荐

  1. React Native通信机制详解

    React Native是facebook刚开源的框架,可以用javascript直接开发原生APP,先不说这个框架后续是否能得到大众认可,单从源码来说,这个框架源码里有非常多的设计思想和实现方式值得 ...

  2. class-dump 复制到/usr/bin目录不可写,Operation not permitted 解决办法

    许多升级了OSX 10.11的朋友在配置class-dump的时候,会发现书上推荐的class-dump存放目录/usr/bin不再可写,如下所示: Operation not permitted 把 ...

  3. Altium Designer生成网表 导出网表【worldsing笔记】

    Design -> Netlist for project -> Protel

  4. C#学习笔记(一):一些零散但重要的知识点汇总

    集合类型 数组 数组需要注意的就是多维数组和数组的数组之间的区别,如下: using System; namespace Study { class Program { static void Mai ...

  5. Winform- TreeView的使用例子

    自动递归生成树,点击树节点的事件在treeView1_AfterSelect里编写,不多说了,直接上代码,备注在这里一下 public partial class Form1 : Form { pub ...

  6. ZOJ1111:Poker Hands(模拟题)

    A poker deck contains 52 cards - each card has a suit which is one of clubs, diamonds, hearts, or sp ...

  7. 利用Microsoft Azure Machine Learning Studio创建机器学习实例

    Microsoft Azure云服务推出机器学习的模块,用户只需上传数据,利用机器学习模块提供的一些算法接口和R语言或别的语言接口,就能利用Microsoft Azure强大的云计算能力来实现自己的机 ...

  8. fastica matlab 转载

    FastICA工具箱1 http://chunqiu.blog.ustc.edu.cn/?p=68#comment-3512 FastICA代码网址如下:http://research.ics.aal ...

  9. Windows 环境下基于 Redis 的 Celery 任务调度模块的实现

    搭建环境: Windows-x64 10 Celery 3.1.23 Celery-with-redis 3.0 Redis-win32-win64 2.4.5   实现步骤: 1.安装 Redis ...

  10. jquery判断输入文字个数的统计代码

    1.js代码部分 <script type="text/javascript">             $(function() { function albumNa ...