您的位置:首页 > 产品设计 > UI/UE

iphone开发之实现UITableView多选删除功能详解

2013-09-13 23:00 441 查看
很多情况下应用需要批量处理功能,但UITableView并没有类似的功能,但我们可以自己实现。

首先在UITableView的 edittingStyleForRowAtIndexPath函数中,添加如下代码:

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
returnUITableViewCellEditingStyleDelete |
UITableViewCellEditingStyleInsert;
}
这样我们就可以得到下面的效果:



注意:初始时设置TableView setEditing=YES;
具体实现:

[cpp]
view plaincopyprint?

//
// CloViewController.m
// MuTableViewTest
//
// Created by Cloay on 12-6-26.

// Copyright (c) 2012年 __MyCompanyName__. All rights reserved.

//

#import "CloViewController.h"


@interface CloViewController ()

@end

@implementation CloViewController
@synthesize dataArray;
@synthesize selectedDic;

- (IBAction)rightBtnPressed:(id)sender{
//显示多选圆圈
[cloMableView setEditing:YES animated:YES];
rightBtn.title = @"确定";
[rightBtn setAction:@selector(rightBtnPressedWithSure:)];
}

- (IBAction)rightBtnPressedWithSure:(id)sender{
//do something with selected cells like delete

// NSLog(@"selectedDic------->:%@", self.selectedDic);

int count = [self.selectedDic count];
if (count > 0 ) {
for (int i = 0; i < count; i++) {
NSInteger row = [[self.selectedDic objectAtIndex:i] row];
[self.dataArray removeObjectAtIndex:row];
}
// NSLog(@"self.dataArray:------>:%@", self.dataArray);

[cloMableView deleteRowsAtIndexPaths:self.selectedDic withRowAnimation:UITableViewRowAnimationFade];
[self.selectedDic removeAllObjects];
// NSLog(@"self.selectedDic--------->:%@", self.selectedDic);

// [cloMableView reloadData];

rightBtn.title = @"删除";
[rightBtn setAction:@selector(rightBtnPressed:)];
[cloMableView setEditing:NO animated:YES];
}else {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"未选中任何数据!" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:@"重新选择", nil];
[alert show];
[alert release];
}
}

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

self.dataArray = [[NSMutableArray alloc] initWithObjects:@"A", @"B", @"C", @"D", @"E", @"F", @"G", @"H", @"I", @"J", @"K", @"L", @"M", nil];
self.selectedDic = [[NSMutableArray alloc] init];

rightBtn = [[UIBarButtonItem alloc] initWithTitle:@"删除" style:UIBarButtonItemStyleBordered target:self action:@selector(rightBtnPressed:)];
self.navigationItem.rightBarButtonItem = rightBtn;
}

- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.

}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

#pragma -mark
#pragma tableview data source method

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return [self.dataArray count];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return 1;
}
#pragma tableView delegate methods

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
return UITableViewCellEditingStyleDelete | UITableViewCellEditingStyleInsert;
}

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{
return YES;
}
//添加一项
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
if ([rightBtn.title isEqualToString:@"确定"]) {
[self.selectedDic addObject:indexPath];
// NSLog(@"Select---->:%@",self.selectedDic);

}
}

//取消一项
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath{
if ([rightBtn.title isEqualToString:@"确定"]) {
[self.selectedDic removeObject:indexPath];
// NSLog(@"Deselect---->:%@",self.selectedDic);

}
}

//选择后
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{
//
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *tableViewIdentifier = @"TableViewIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:tableViewIdentifier];
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:tableViewIdentifier];
NSInteger row = [indexPath row];
cell.textLabel.text = [self.dataArray objectAtIndex:row];
return cell;
}

#pragma mark-
#pragma AlertView delegate method

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
if (buttonIndex == 0) {
rightBtn.title = @"删除";
[rightBtn setAction:@selector(rightBtnPressed:)];
[cloMableView setEditing:NO animated:YES];
}
}
@end

//
//  CloViewController.m
//  MuTableViewTest
//
//  Created by Cloay on 12-6-26.
//  Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
//

#import "CloViewController.h"

@interface CloViewController ()

@end

@implementation CloViewController
@synthesize dataArray;
@synthesize selectedDic;

- (IBAction)rightBtnPressed:(id)sender{
    //显示多选圆圈
    [cloMableView setEditing:YES animated:YES];
    rightBtn.title = @"确定";
    [rightBtn setAction:@selector(rightBtnPressedWithSure:)];
}

- (IBAction)rightBtnPressedWithSure:(id)sender{
    //do something with selected cells like delete
//    NSLog(@"selectedDic------->:%@", self.selectedDic);
    int count = [self.selectedDic count];
    if (count > 0 ) {
        for (int i = 0; i < count; i++) {
            NSInteger row = [[self.selectedDic objectAtIndex:i] row];
            [self.dataArray removeObjectAtIndex:row];
        }
        //    NSLog(@"self.dataArray:------>:%@", self.dataArray);
        [cloMableView deleteRowsAtIndexPaths:self.selectedDic withRowAnimation:UITableViewRowAnimationFade];
        [self.selectedDic removeAllObjects];
        //    NSLog(@"self.selectedDic--------->:%@", self.selectedDic);
//        [cloMableView reloadData];
        rightBtn.title = @"删除";
        [rightBtn setAction:@selector(rightBtnPressed:)];
        [cloMableView setEditing:NO animated:YES];
    }else {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"未选中任何数据!" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:@"重新选择", nil];
        [alert show];
        [alert release];
    }
}

- (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view, typically from a nib.
    self.dataArray = [[NSMutableArray alloc] initWithObjects:@"A", @"B", @"C", @"D", @"E", @"F", @"G", @"H", @"I", @"J", @"K", @"L", @"M", nil];
    self.selectedDic = [[NSMutableArray alloc] init];
    
    rightBtn = [[UIBarButtonItem alloc] initWithTitle:@"删除" style:UIBarButtonItemStyleBordered target:self action:@selector(rightBtnPressed:)];
    self.navigationItem.rightBarButtonItem = rightBtn;
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

#pragma -mark
#pragma tableview data source method
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return  [self.dataArray count];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return 1;
}
#pragma tableView delegate methods
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
    return UITableViewCellEditingStyleDelete | UITableViewCellEditingStyleInsert;
}

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{
    return YES;
}
//添加一项
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    if ([rightBtn.title isEqualToString:@"确定"]) {
        [self.selectedDic addObject:indexPath];
//        NSLog(@"Select---->:%@",self.selectedDic);
    }
}

//取消一项
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath{
    if ([rightBtn.title isEqualToString:@"确定"]) {
        [self.selectedDic removeObject:indexPath];
//        NSLog(@"Deselect---->:%@",self.selectedDic);
    }
}

//选择后
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{
    //
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *tableViewIdentifier = @"TableViewIdentifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:tableViewIdentifier];
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:tableViewIdentifier];
    NSInteger row = [indexPath row];
    cell.textLabel.text = [self.dataArray objectAtIndex:row];
    return cell;
}

#pragma mark-
#pragma AlertView delegate method
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
    if (buttonIndex == 0) {
        rightBtn.title = @"删除";
        [rightBtn setAction:@selector(rightBtnPressed:)];
        [cloMableView setEditing:NO animated:YES];
    }
}
@end


效果图:





删除后:



代码比较简单,就不过多解释了!

有问题请留言,大家一起交流学习!

说明:转载请注明出处!http://blog.csdn.net/cloay/article/details/7697180
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: