tableView对cell的编辑

作者: yi叶知秋 | 来源:发表于2016-06-29 11:13 被阅读174次

表的一种添加 cell 方法
#import "ViewController.h"
@interface ViewController ()<UITableViewDataSource,UITableViewDelegate>
{
UITableView *_tableView;
//存放标的数据
NSMutableArray *_dataArray;
}
@end

@implementation ViewController
-(void)dealloc
{
    [_dataArray release];
    [_tableView release];
    [super dealloc];
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 64, 320, 480-64) style:(UITableViewStylePlain)];
    _tableView.delegate = self;
    _tableView.dataSource =self;
    [self.view addSubview:_tableView];
    //初始化数组
    _dataArray = [[NSMutableArray alloc] initWithObjects:@"a",@"b",@"c",@"d",@"e", nil];
    //添加导航右边的按钮
    UIBarButtonItem *rightBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:(UIBarButtonSystemItemAdd) target:self action:@selector(addData)];
    self.navigationItem.rightBarButtonItem = rightBtn;
    [rightBtn release];
    /*
     表的添加:  非编辑状态下的添加
     1.表的添加一般不用reloadData
     2.表有自己的添加方法
     insertRowsAtIndexPaths:
     withRowAnimation:
     3.通过行号和区号找打对应的索引
     NSIndexPath indexPathForRow:
     inSection
     */
}
-(void)addData
{
    //1.让数组的元素增加
    [_dataArray addObject:@"新数据"];
    //2.刷新表
    //[_tableView reloadData];
    
    //获取区数
    int section = 0;
    //获取行数,行号 = 数组元素个数 - 1
    int row = _dataArray.count-1;

    //根据行数和区数找到对应的索引
    //indexPathForRow 要增加的行号  inSection 在哪个区
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:section];

    //insertRowsAtIndexPaths 表的插入数据方法.在指定行插入数据  insert:插入
    //参数1:数组里面的是 索引indexpath
    [_tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:(UITableViewRowAnimationRight)];
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return _dataArray.count;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellID = @"cellID";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:(UITableViewCellStyleDefault) reuseIdentifier:@"cellID"];
    }
    //设置cell文本内容
    cell.textLabel.text = [_dataArray objectAtIndex:indexPath.row];
    return cell;
}
@end

表对cell的编辑方法,包括添加新的cell、删除cell,以及对cell的移动

#import "ViewController.h"
@interface ViewController ()<UITableViewDataSource,UITableViewDelegate>
{
    UITableView *_tabelView;
    NSMutableArray *_dataArray;
}
@end

@implementation ViewController
-(void)dealloc
{
    [_tabelView release];
    [_dataArray release];
    [super dealloc];
}
- (void)viewDidLoad
{
    [super viewDidLoad];
    _tabelView = [[UITableView alloc] initWithFrame:CGRectMake(0, 64, 320, 480-64) style:(UITableViewStylePlain)];
    _tabelView.delegate = self;
    _tabelView.dataSource = self;
    [self.view addSubview:_tabelView];
    _dataArray = [[NSMutableArray alloc] initWithObjects:@"a",@"b",@"c",@"d",@"e"@"f",@"g", nil];
    //导航条右边按钮
    UIBarButtonItem *rightBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:(UIBarButtonSystemItemEdit) target:self action:@selector(editingData)];
    self.navigationItem.rightBarButtonItem = rightBtn;
    [rightBtn release];
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return _dataArray.count;
}
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellID = @"cellID";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:(UITableViewCellStyleDefault) reuseIdentifier:@"cellID"];
    }
    cell.textLabel.text = [_dataArray objectAtIndex:indexPath.row];
    return cell;
}
#pragma mark 表的编辑
-(void)editingData
{
    //editing 表的编辑
    //改变标的编辑状态
    _tabelView.editing = !_tabelView.editing;
}
-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //UITableViewCellEditingStyle:cell的编辑样式
    
    //UITableViewCellEditingStyleNone 当cell移动的时候使用
    //默认是UITableViewCellEditingStyleDelete 删除样式
    //UITableViewCellEditingStyleInsert 插入样式
    return UITableViewCellEditingStyleInsert;
}
#pragma mark -- 提交编辑样式的时候调用 表的插入数据,删除数据都是使用这个方法
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
//插入新数据
    //1.在指定行插入数据 atIndex 在指定的位置insertObject插入数据
    [_dataArray insertObject:@"新数据" atIndex:indexPath.row];
    //2.刷新表,用表的插入方法
    [tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:(UITableViewRowAnimationFade)];
    
//删除指定的行
//[_dataArray removeObjectAtIndex:indexPath.row];
////刷新表,用表的删除方法
//[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:(UITableViewRowAnimationFade)];
}

#pragma mark -- 删除状态下使用  返回删除按钮的标题 默认delete
//当cell的编辑样式为UITableViewCellEditingStyleDelete才有效
-(NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return @"删除";
}

#pragma mark -- 表的移动方法,当移动单元格的时候使用
//source资源destination目的地
//sourceIndexPath 要引动的数据的索引
//destinationIndexPath要移动后的索引,目的地的索引
-(void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
{
    //1.取出数组中的元素(原来的位置)
    NSString *string = [_dataArray objectAtIndex:sourceIndexPath.row];
    //2.从数组中移除要移动的元素
    [_dataArray removeObject:string];
    //3.把要移动的元素添加到目的地的位置(在目的地插入数据)
    [_dataArray insertObject:string atIndex:destinationIndexPath.row];
}
@end

相关文章

网友评论

    本文标题:tableView对cell的编辑

    本文链接:https://www.haomeiwen.com/subject/gyfxjttx.html