表的一种添加 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