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 = 50;
    self.tableView.allowsSelectionDuringEditing = YES;
    self.tableView.dataSource =self;
    self.tableView.delegate = self;
    [self.view addSubview:self.tableView];
    self.items = [NSMutableArray arrayWithCapacity:0];
    for (int i=0; i<50; 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 = 0; 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 1;
}

- (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:17];
    }

    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

使用对象感觉较之前的字典好理解些,也简单些

效果图:

时间: 2024-10-24 17:52:47

UITableView多选删除的相关文章

IOS UITableView多选删除功能

UITbableView作为列表展示信息,除了展示的功能,有时还会用到删除,比如购物车.收藏列表等. 单行删除功能可以直接使用系统自带的删除功能,当横向轻扫cell时,右侧出现红色的删除按钮,点击删除当前cell.或者让表格进入编辑状态后,点击左侧的红色按钮,右侧出现删除按钮,删除,如下图所示.单行自带删除已经在前面文章中进行过讲解,需要的可以去查阅. 多选删除是点击编辑按钮,让表格进入编辑状态后,每行的左侧出现一个小圆圈,当点击行的时候,可以选中该行或者取消选中该行,当点击按钮确定删除的时候才

iOS UITableView划动删除的实现

标签:划动删除 iphone 滑动删除 ios UITableView 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://rainbird.blog.51cto.com/211214/634587 从七八月前对苹果一无所知,到现在手持iphone,ipad,itouch有三个线上成熟app并熟练开发ios应用.一路走来一直站在前辈的肩膀上不断进步.如今生活工作稳定是时候将一直以来的一些心得整理出来了.想来想去决定先说说UITab

tableview 多选删除

镔哥,就直接写了个demo用来做参考: // //  ViewController.h //  TableView多选删除 // //  Created by apple on 14/12/9. //  Copyright (c) 2014年 youdianshang. All rights reserved. // #import <UIKit/UIKit.h> @interface ViewController : UIViewController<UITableViewDataSo

iOS TableView多选删除理解2

因为镔哥学习iOS也不是很长时间,所以对很多控件都是一边工作一边学习,现在最近因为项目需求又研究了一下多选删除,其实网上很多这样的demo,但是基本不是纯代码,而且很多方面没有考虑,然后我自己理解上又根基一些demo,自己先了一个,供大家一起学习. 我讲解一下思路就直接代码吧: 思路:一般要实现多选删除 1:前提你要有数据: NSMutableArray *dataArray;//临时用假数据代替 2:你也要有一个存储勾选删除的数据 NSMutableArray *removeList;//勾选

UITableView 左划删除

-(BOOL) tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { returnYES; } -(void) tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPat

GridView的 PreRender事件与范例--GridView + CheckBox,点选多列资料(复选删除)

GridView的 PreRender事件与范例--GridView + CheckBox,点选多列资料(复选删除) 之前有一个范例,相同的结果可以用两种作法来实践 [GridView] 资料系结表达式?或是RowDataBound事件来作? 我觉得这种教学方法很不错,「同一个题目,有多种解法」 (如同下面的李小龙图片所说的,"熟练度"很重要) 学生反应比较热烈,也可以挑自己惯用的.自己(目前程度)学得会的方式来处理 想要当个职场成功者,李小龙的精神你该学学!http://buzzor

30分钟搞定yii的gridview,你可能只看这一篇就够了 (包含基本配置,下拉筛选,多选删除)

view代码 <?php /* @var $this yii\web\View */ /* @var $form yii\bootstrap\ActiveForm */ /* @var $model \common\models\LoginForm */ use yii\helpers\Url; use yii\helpers\Html; use common\helps\Helps; use common\helps\ArrayHelper; use yii\grid\GridView; us

IOS7 UITableView一行滑动删除后 被删除行的下一行的点击事件将被忽略解决办法

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {     returnUITableViewCellEdit

【凯子哥带你夯实应用层】使用ActionMode实现有删除动画的多选删除功能

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 ActionMode是3.0之后,官方推荐的一种上下文菜单的实现方式,在之前一直用的是Context Menu,今天这篇文章简单介绍一下ActionMode,并实现多选删除功能. 如果要在ListView这类控件中实现多选,我们可以通过设置setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL)来实现,然后通过设置setMultiChoiceModeListen