第一步,准备好数据源和委托
在TestViewController.H接口文件中设置
#import
@interface TestViewController
:
UIViewController<<span style="color: rgb(97, 34, 174);
font-family: Menlo; line-height:
normal;">UITableViewDataSource,UITableViewDelegate>
{
NSMutableDictionary *dataDic;
UIBarButtonItem
*deletebtn;
}
@property (nonatomic,retain)UITableView
*testTableView;------自定义表视图
@property (nonatomic,retain)NSMutableArray
*dataArray;------数据源
@end
在TestViewController.m中
- (void)viewDidLoad
{
[super
viewDidLoad];
dataDic
=
[[NSMutableDictionary alloc]init];
_dataArray
=
[[NSMutableArray
alloc]initWithObjects:@"1",@"2",@"3",@"4",@"5",@"6",nil];
-------准备好数据
_testTableView
=
[[UITableView
alloc]initWithFrame:self.view.bounds
style:UITableViewStylePlain];-------------------初始化表视图
_testTableView.delegate
=
self;-----------------设置tableview委托为self
_testTableView.dataSource
=
self;--------------设置tableview数据源为self
[self.view
addSubview:_testTableView];
//下面代码在导航栏的右边添加了一个title为编辑的按钮
UIBarButtonItem
*rightButton
= [[UIBarButtonItem
alloc]initWithTitle:@"编辑"
style:UIBarButtonItemStylePlain
target:self
action:@selector(editAction)];
self.navigationItem.rightBarButtonItem
=
rightButton;
}
第二步,展示数据
- (NSInteger)numberOfSectionsInTableView:(UITableView
*)tableView
{
return
1;
}
- (NSInteger)tableView:(UITableView
*)tableView numberOfRowsInSection:(NSInteger)section
{
return
[_dataArray
count];
}
- (UITableViewCell*)tableView:(UITableView
*)tableView cellForRowAtIndexPath:(NSIndexPath
*)indexPath
{
static
NSString
*CellIdentifier = @"Cell";
UITableViewCell
*cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if
(cell == nil)
{
cell =
[[UITableViewCell
alloc]initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier];
}
cell.textLabel.text
= [_dataArray
objectAtIndex:indexPath.row];
return
cell;
}
通过上面三个代理方法向uitableview中添加了数据
通过上面两步就实现了数据展示工作,接下来就实现关键的数据删除了。
//设置编辑风格EditingStyle
- (UITableViewCellEditingStyle)tableView:(UITableView
*)tableView editingStyleForRowAtIndexPath:(NSIndexPath
*)indexPath
{
if
(self.testTableView.editing)----通过表视图是否处于编辑状态来选择是左滑删除,还是多选删除。
{
//当表视图处于没有未编辑状态时选择多选删除
return
UITableViewCellEditingStyleDelete|
UITableViewCellEditingStyleInsert;
}
else
{
//当表视图处于没有未编辑状态时选择左滑删除
return
UITableViewCellEditingStyleDelete;
}
}
//根据不同的editingstyle执行数据删除操作(点击左滑删除按钮的执行的方法)
- (void)tableView:(UITableView
*)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle
forRowAtIndexPath:(NSIndexPath
*)indexPath
{
if
(editingStyle
== UITableViewCellEditingStyleDelete)
{
[_dataArray
removeObjectAtIndex:indexPath.row];
//
Delete the row from the data source.
[tableView deleteRowsAtIndexPaths:[NSArray
arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationFade];
}
else
if(editingStyle
== (UITableViewCellEditingStyleDelete|
UITableViewCellEditingStyleInsert))
{
}
}
//修改左滑删除按钮的title
- (NSString
*)tableView:(UITableView
*)tableView
titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath
*)indexPath
{
return
@"何超";
}
启用上面三个代理,并且增加数据删除操作
在一条数据上向右滑动一下
点击"何超",
这样子就已经成功实现了左滑删除了
第一步,设置editingstyle
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView
editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (self.testTableView.editing)----通过表视图是否处于编辑状态来选择是左滑删除,还是多选删除。
{
return UITableViewCellEditingStyleDelete| UITableViewCellEditingStyleInsert;
}
else
{
return UITableViewCellEditingStyleDelete;
}
}
当我们[self.testTableView
setEditing:YES animated:YES]的时候,
UITableViewCellEditingStyleDelete是出现红色的减号,再点一下就出来滑动时出现的删除按钮;
UITableViewCellEditingStyleInsert是出现红色的加号,应该是插入数据的时候用的吧,没细研究。
UITableViewCellEditingStyleDelete| UITableViewCellEditingStyleInsert最神奇的是两个同时出现时就会出现了前面带圈的多选项
第二步,调用前面带圈的多选项,其实就是调用[self.testTableView setEditing:YES animated:YES],隐藏的话就setEditing:NO;
第三步,实现记录选择或者取消的项,不过没有找到实现这个功能的专门的方法,所以只能折中处理了。
- (void)tableView:(UITableView
*)tableView didDeselectRowAtIndexPath:(NSIndexPath
*)indexPath
{
//dataDic就是记录选择或者取消的项的字典
[dataDic
removeObjectForKey:[_dataArray
objectAtIndex:indexPath.row]];
if
(dataDic.count
== 0)
{
deletebtn.enabled
= NO;
}
else
{
deletebtn.enabled
= YES;
}
}
- (void)tableView:(UITableView
*)tableView didSelectRowAtIndexPath:(NSIndexPath
*)indexPath
{
//把indexpath
以_dataArray的值作为key
插入到dataDic字典中
[dataDic
setObject:indexPath
forKey:[_dataArray
objectAtIndex:indexPath.row]];
if
(dataDic.count
== 0)
{
deletebtn.enabled
= NO;
}
else
{
deletebtn.enabled
= YES;
}
}
一个是多选状态下添加刚选择的项,一下移除刚取消的项,有点复杂。
第四步,得到删除的项,处理一下呗。我在toolbar中添加了一个title为删除的按钮,点击该按钮,就会删除选中的项。
deletebtn = [[UIBarButtonItem alloc]initWithTitle:@"删除"
style:UIBarButtonItemStylePlain target:self
action:@selector()];
NSMutableArray *Items
= [[NSMutableArray alloc]initWithObjects:deletebtn,
nil];
if
(self.testTableView.editing)
{
[self.navigationController
setToolbarHidden:NO
animated:YES];
}
else
{
[self.navigationController
setToolbarHidden:YES
animated:YES];
}
[self
setToolbarItems:Items];
deletebtn.enabled
= NO;
- (void)delbtnClick
{
//以下代码是处理数据的删除的操作。
[_dataArray
removeObjectsInArray:[dataDic
allKeys]];
[self.testTableView
deleteRowsAtIndexPaths:[dataDic
allValues]
withRowAnimation:UITableViewRowAnimationFade];
[dataDic
removeAllObjects];
----------------------------------------------------------------------------------------
[self.testTableView
setEditing:!self.testTableView.editing
animated:YES];
[self.navigationController
setToolbarHidden:YES
animated:YES];
}
点击编辑,出现选择框
|