iOS应用中UITableView左滑自定义选项及批量删除的实现
实现uitableview左滑自定义选项
当uitableview进入编辑模式,在进行左滑操作的cell的右边,默认会出现delete按钮,如何自定义左滑出现的按钮呢?
只需要实现uitableview下面的这个代理方法。
- (nsarray<uitableviewrowaction *> *)tableview:(uitableview *)tableview editactionsforrowatindexpath:(nsindexpath *)indexpath
{
uitableviewrowaction *likeaction = [uitableviewrowaction rowactionwithstyle:uitableviewrowactionstylenormal title:@"喜欢" handler:^(uitableviewrowaction * _nonnull action, nsindexpath * _nonnull indexpath) {
// 实现相关的逻辑代码
// ...
// 在最后希望cell可以自动回到默认状态,所以需要退出编辑模式
tableview.editing = no;
}];
uitableviewrowaction *deleteaction = [uitableviewrowaction rowactionwithstyle:uitableviewrowactionstyledefault title:@"删除" handler:^(uitableviewrowaction * _nonnull action, nsindexpath * _nonnull indexpath) {
// 首先改变model
[self.books removeobjectatindex:indexpath.row];
// 接着刷新view
[self.tableview deleterowsatindexpaths:@[indexpath] withrowanimation:uitableviewrowanimationautomatic];
// 不需要主动退出编辑模式,上面更新view的操作完成后就会自动退出编辑模式
}];
return @[deleteaction, likeaction];
}
此时左滑就会出现两个按钮,一个是喜欢,另一个是删除。出现的顺序和在这个方法中返回的数组中的元素顺序相关。
如果实现了上述方法,那么之前提到过的tableview:commiteditingstyle:forrowatindexpath:和tableview: titlefordeleteconfirmationbuttonforrowatindexpath:方法就不会再调用了。(如果为了兼容以前的版本,那么需要实现tableview:commiteditingstyle:forrowatindexpath:方法,在这个方法里什么都不用做即可。)
uitableview的多行同时删除
下面这段代码配合xib使用, 不过关键不在这地方,记住后面的使用到的委托。
其实质就是数组array的删除操作。
//
// uitableviewdeltemutilrowsviewcontroller.m
// uitableviewdeltemutilrows
//
#import "uitableviewdeltemutilrowsviewcontroller.h"
@implementation uitableviewdeltemutilrowsviewcontroller
@synthesize tableview;
@synthesize dataarray;
@synthesize deletedic;
@synthesize leftbutton;
@synthesize rightbutton;
#pragma mark -
#pragma mark view lifecycle
- (void)viewdidload {
[super viewdidload];
dataarray = [[nsmutablearray alloc] initwithobjects:@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",nil];
deletedic = [[nsmutabledictionary alloc] init];
rightbutton.title = @"编辑";
}
- (ibaction)chosedata{
if (rightbutton.title == @"编辑") {
rightbutton.title = @"确定";
[self.tableview setediting:yes animated:yes];
}
else {
rightbutton.title = @"编辑";
[deletedic removeallobjects];
[self.tableview setediting:no animated:yes];
}
}
- (ibaction)deletefuntion{
[dataarray removeobjectsinarray:[deletedic allkeys]];
[self.tableview deleterowsatindexpaths:[nsarray arraywitharray:[deletedic allvalues]] withrowanimation:uitableviewrowanimationfade];
[deletedic removeallobjects];
}
- (void)dealloc {
[leftbutton release];
[rightbutton release];
[deletedic release];
[dataarray release];
[tableview release];
[super dealloc];
}
#pragma mark -
#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 [dataarray count];
}
// customize the appearance of table view cells.
- (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] autorelease];
}
// configure the cell...
cell.textlabel.text = [dataarray objectatindex:indexpath.row];
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;
}
*/
- (uitableviewcelleditingstyle)tableview:(uitableview *)tableview editingstyleforrowatindexpath:(nsindexpath *)indexpath
{
return uitableviewcelleditingstyledelete | uitableviewcelleditingstyleinsert;
}
#pragma mark -
#pragma mark table view delegate
- (void)tableview:(uitableview *)tableview didselectrowatindexpath:(nsindexpath *)indexpath {
if (rightbutton.title== @"确定") {
[deletedic setobject:indexpath forkey:[dataarray objectatindex:indexpath.row]];
}
else {
}
}
- (void)tableview:(uitableview *)tableview diddeselectrowatindexpath:(nsindexpath *)indexpath{
if (rightbutton.title == @"确定") {
[deletedic removeobjectforkey:[dataarray objectatindex:indexpath.row]];
}
}
@end
下一篇: 清汤面怎么做好吃,你知道答案吗?