之前想在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. 小物件之输出简单的table

    如果需要将一个数组输出一个简单的table可以采用以下代码(该数组非空) <?php $thead=array("name"=>"名称"," ...

  2. 常用SQL代码段

    代码使用时须测试. --聚合函数 use pubs go select avg(distinct price) --算平均数 from titles where type='business' go ...

  3. zabbix 3.0 安装

    zabbix3.0安装注意: 1.PHP要5.4版本以上 2.防火墙关闭 3.selinux关闭 注:本操作系统为centos 6.5 X86   操作步骤 一.安装PHP 添加 epel 源 # r ...

  4. jquery ajax 报交请求返回 HTTP 400 错误

    提交请求的AJAX代码如下: 点击(此处)折叠或打开 $.ajax({ url: "${ctx}/selfhelp/userAttributeAnalysis/userAttributeLi ...

  5. listview自定义背景以及item自定义背景

    item向自定义背景,可以根据position来设置不同的背景. listview背景设置是需要注意设置下面这几项: //点下时整个页面的背景 android:cacheColorHint=" ...

  6. MySQL 中的两种临时表

    来源:阿里云RDS - 数据库内核组 链接:http://mysql.taobao.org/monthly/2016/06/07/ 外部临时表 通过CREATE TEMPORARY TABLE 创建的 ...

  7. 创建线程(Background Thread)的N种方式

    第一.Thread类 Thread类是实例化线程的主要方法:一个Thread实例管理一个线程,即执行序列.通过简单实例化一个对象,就可以创建一个线程,然后通过Thread对象提供的方法对线程进行管理. ...

  8. Linux添加环境变量与GCC编译器添加INCLUDE与LIB环境变量

    对所有用户有效在/etc/profile增加以下内容.只对当前用户有效在Home目录下的.bashrc或.bash_profile里增加下面的内容:(注意:等号前面不要加空格,否则可能出现 comma ...

  9. C#_MVC_Repository_CURD_Controller

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  10. Simulate android behaviors on win32

    To make debugging android games on win32 more convenience, we added some simulate actions to win32 p ...