UITableView多选删除
设置一个在编辑状态下点击可改变图片的cell
FileItemTableCell.h
#import <UIKit/UIKit.h> @interface FileItemTableCell : UITableViewCell
{
@private
UIImageView* m_checkImageView;
BOOL m_checked;
} - (void) setChecked:(BOOL)checked; @end
FileItemTableCell.m
#import "FileItemTableCell.h" @implementation FileItemTableCell - (void) setCheckImageViewCenter:(CGPoint)pt alpha:(CGFloat)alpha animated:(BOOL)animated
{
if (animated)
{
[UIView beginAnimations:nil context:nil];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:0.3]; m_checkImageView.center = pt;
m_checkImageView.alpha = alpha; [UIView commitAnimations];
}
else
{
m_checkImageView.center = pt;
m_checkImageView.alpha = alpha;
}
} - (void) setEditing:(BOOL)editting animated:(BOOL)animated
{
if (self.editing == editting)
{
return;
} [super setEditing:editting animated:animated]; if (editting)
{
self.selectionStyle = UITableViewCellSelectionStyleNone; // self.backgroundView = [[UIView alloc] init];
// self.backgroundView.backgroundColor = [UIColor whiteColor];
// self.textLabel.backgroundColor = [UIColor clearColor];
// self.detailTextLabel.backgroundColor = [UIColor clearColor]; if (m_checkImageView == nil)
{
m_checkImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Unselected.png"]];
[self addSubview:m_checkImageView];
} [self setChecked:m_checked];
m_checkImageView.center = CGPointMake(-CGRectGetWidth(m_checkImageView.frame) * 0.5,
CGRectGetHeight(self.bounds) * 0.5);
m_checkImageView.alpha = 0.0;
[self setCheckImageViewCenter:CGPointMake(20.5, CGRectGetHeight(self.bounds) * 0.5)
alpha:1.0 animated:animated];
}
else
{
m_checked = NO;
// self.selectionStyle = UITableViewCellSelectionStyleBlue;
self.backgroundView = nil; if (m_checkImageView)
{
[self setCheckImageViewCenter:CGPointMake(-CGRectGetWidth(m_checkImageView.frame) * 0.5,
CGRectGetHeight(self.bounds) * 0.5)
alpha:0.0
animated:animated];
}
}
} - (void)dealloc
{
m_checkImageView = nil;
} - (void) setChecked:(BOOL)checked
{
if (checked)
{
m_checkImageView.image = [UIImage imageNamed:@"Selected.png"];
self.backgroundView.backgroundColor = [UIColor colorWithRed:223.0/255.0 green:230.0/255.0 blue:250.0/255.0 alpha:1.0];
}
else
{
m_checkImageView.image = [UIImage imageNamed:@"Unselected.png"];
self.backgroundView.backgroundColor = [UIColor whiteColor];
}
m_checked = checked;
}
ViewController.m
#import "ViewController.h"
#import "FileItemTableCell.h" @interface Item : NSObject @property (retain, nonatomic) NSString *title; @property (assign, nonatomic) BOOL isChecked; @end @implementation Item @end
@interface ViewController ()<UITableViewDataSource,UITableViewDelegate> @property (nonatomic,strong)UITableView *tableView;
@property (retain, nonatomic) NSMutableArray *items;
@end @implementation ViewController - (instancetype)init
{
self = [super init];
if (self) {
UIBarButtonItem *right = [[UIBarButtonItem alloc]initWithTitle:@"Edit" style:UIBarButtonItemStylePlain target:self action:@selector(setEditing:animated:)];
self.navigationItem.rightBarButtonItem = right; UIBarButtonItem *left = [[UIBarButtonItem alloc]initWithTitle:@"删除" style:UIBarButtonItemStylePlain target:self action:@selector(leftBarButtonPressed)];
self.navigationItem.leftBarButtonItem = left;
}
return self;
} - (void)viewDidLoad {
[super viewDidLoad];
self.tableView = [[UITableView alloc]initWithFrame:self.view.bounds];
self.tableView.rowHeight = ;
self.tableView.allowsSelectionDuringEditing = YES;
self.tableView.dataSource =self;
self.tableView.delegate = self;
[self.view addSubview:self.tableView];
self.items = [NSMutableArray arrayWithCapacity:];
for (int i=; i<; i++) {
Item *item = [[Item alloc] init];
item.title = [NSString stringWithFormat:@"%d",i];
item.isChecked = NO;
[_items addObject:item];
}
} - (void)leftBarButtonPressed {
NSLog(@"删除");
NSMutableArray *array = [[NSMutableArray alloc]initWithArray:_items];
for (int i = ; i < array.count; i ++) {
Item* item = [array objectAtIndex:i];
if (item.isChecked) {
[_items removeObject:item];
}
}
[_tableView reloadData];
NSLog(@"%ld",_items.count);
} - (void) setEditing:(BOOL)editting animated:(BOOL)animated
{
self.navigationItem.rightBarButtonItem.title = _tableView.editing ? @"Edit" : @"Done";
[_tableView setEditing:!_tableView.editing animated:YES];
[self.tableView performSelector:@selector(reloadData) withObject:nil afterDelay:0.3];
} #pragma mark -
#pragma mark Table view data source - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
// Return the number of sections.
return ;
} - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [_items count];
} - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
return UITableViewCellEditingStyleNone;
} // Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; FileItemTableCell *cell = (FileItemTableCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[FileItemTableCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
cell.textLabel.font = [cell.textLabel.font fontWithSize:];
} cell.accessoryType = UITableViewCellAccessoryNone;
cell.textLabel.textColor = [UIColor blackColor]; Item* item = [_items objectAtIndex:indexPath.row];
cell.textLabel.text = item.title;
[cell setChecked:item.isChecked];
return cell;; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
Item* item = [_items objectAtIndex:indexPath.row]; if (self.tableView.editing)
{
FileItemTableCell *cell = (FileItemTableCell*)[tableView cellForRowAtIndexPath:indexPath];
item.isChecked = !item.isChecked;
[cell setChecked:item.isChecked];
}
[tableView deselectRowAtIndexPath:indexPath animated:YES];
} @end
使用对象感觉较之前的字典好理解些,也简单些
效果图:
2015.6.4更新
最新效果图:添加全选功能
最新Demo下载地址:http://pan.baidu.com/s/1o6DpN0u
修改了个全选的bug:https://github.com/WuJiForFantasy/UITableViewChooseDelete-.git
UITableView多选删除的更多相关文章
- IOS UITableView多选删除功能
UITbableView作为列表展示信息,除了展示的功能,有时还会用到删除,比如购物车.收藏列表等. 单行删除功能可以直接使用系统自带的删除功能,当横向轻扫cell时,右侧出现红色的删除按钮,点击删除 ...
- ios UITableView多选删除
第一步, - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath ...
- UITableView划动删除的实现
对于app应用来说,使用列表的形式展现数据非UITableView莫属.在熟练掌握了用UITableView展示数据以后,是不是也遇到了需要删除数据的需求?是不是觉得在一行数据上划动一下,然后出现一个 ...
- iOS UITableView划动删除的实现
标签:划动删除 iphone 滑动删除 ios UITableView 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://rainb ...
- cxgrid多选删除
设置OptionsData选项中的Editing设为True,按着Shift和Ctrl可实现多选 SelectionChanged事件 For i:= 0 To cxGrid1DBTableView1 ...
- 【凯子哥带你夯实应用层】使用ActionMode实现有删除动画的多选删除功能
转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 ActionMode是3.0之后.官方推荐的一种上下文菜单的实现方式,在之前一直用的是Co ...
- GridView的 PreRender事件与范例--GridView + CheckBox,点选多列资料(复选删除)
GridView的 PreRender事件与范例--GridView + CheckBox,点选多列资料(复选删除) 之前有一个范例,相同的结果可以用两种作法来实践 [GridView] 资料系结表达 ...
- [习题] FindControl 简单练习--GridView + CheckBox,点选多列数据(复选删除)#3 List或数组
[习题] FindControl 简单练习--GridView + CheckBox,点选多列数据(复选删除)#3 List或数组 之前的范例,使用字符串.文字来记录将删除的文章ID 后续会有很多小缺 ...
- JQuery Easyui/TopJUI表格基本的删除功能(删除当前行和多选删除)
需求:数据表格datagrid实现删除当前行和多选删除的功能. html <a href="javascript:void(0)" data-toggle="top ...
随机推荐
- MongoDB复制机制实例
MongoDB的主从复制是一个主可以多从已从又可以为主进行主从复制.在这里就是实现一主一从一个仲裁服务器使用一个数据库服务器通过提供不同的端口. 一.启动一个MongoDB服务名字是applicati ...
- SQL开发 循序渐进
吉庆师傅整理: http://www.itpub.net/thread-1418150-1-1.html
- poj 1679 The Unique MST
题目连接 http://poj.org/problem?id=1679 The Unique MST Description Given a connected undirected graph, t ...
- android开发系列之gradle认识
后面的系列博客,我将会写一写自己这段时间对于android的学习.认识.体会,希望能够与大家分享. 相信大家从ADT开发切换到android studio最大.最直观的变化就是gradle,因为在an ...
- Convert Geometry data into a Geography data in MS SQL Server
DECLARE @geog GEOGRAPHY; DECLARE @geom GEOMETRY; ); SET @geom = @geom.MakeValid() --Force to valid g ...
- lvs keepalived 安装配置详解
前段时间看了一篇文章,lvs做负载均衡根F5差不多,说实话不怎么相信,因为F5没玩过,也无法比较.F5相当的贵,真不是一般企业能负担的起的.负载均衡软件也用过不少,nginx,apache,hapro ...
- openSUSE install failed
install openSUSE 13.1 with vmware play (version 6.0.0) calling the yast module 'inst_autoinit has f ...
- .Net开源数据库设计工具Mr.E For Linq (EF 6.1) 教程(三)更新已发布的数据库
项目发布到服务器后,如果在后期,数据库的结构发生变更,如何更新到服务器呢? 首先,右键点击数据库,导出结构脚本文件 把脚本文件和 Mr.E.rar拷贝到服务器,在服务器解压Mr.E,运行其中的“更新数 ...
- UIAlertControl swift
let alertController = UIAlertController(title: "开始!", message: "游戏就要开始,你准备好了吗?", ...
- P1571: [Usaco2009 Open]滑雪课Ski
DP. ; var t,s,n,i,j,m,l,a,c,d:longint; f,e:array[..,..maxn] of longint; q:array[..] of longint; g:ar ...