UITableView 的增删改 自定义UITableViewCell
Posted iOS软件开发之路
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UITableView 的增删改 自定义UITableViewCell相关的知识,希望对你有一定的参考价值。
//设置编辑模式
[self.tableView setEditing:YES animated:YES];
//可以不写
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
return YES;
进行对UITabelView编辑时,先对数据源进行操作,后对数组进行操作
(1)删除、插入
//确定编辑的选项
//UITableViewCellEditingStyle
UITableViewCellEditingStyleNone 不编辑
UITableViewCellEditingStyleDelete 删除
UITableViewCellEditingStyleInsert 插入
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
//UITableViewRowAnimation
UITableViewRowAnimationFade, //淡入淡出
UITableViewRowAnimationRight, //从右滑入 // slide in from right (or out to right)
UITableViewRowAnimationLeft, //从左滑入
UITableViewRowAnimationTop, //从上滑入
UITableViewRowAnimationBottom, //从下滑入
UITableViewRowAnimationNone, // available in ios 3.0
UITableViewRowAnimationMiddle, // available in iOS 3.2. attempts to keep cell centered in the space it will/did occupy
UITableViewRowAnimationAutomatic = 100 // available in iOS 5.0. chooses an appropriate animation style for you
EG:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if(editingStyle == UITableViewCellEditingStyleDelete) {
[self.dataList removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
//刷新表格 无动画显示
[tableView reloadData];
//插入操作
}else if (editingStyle == UITableViewCellEditingStyleInsert) {
[self.dataList insertObject:@"baby" atIndex:indexPath.row];
[tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
[tableView reloadData];
}
}
//更改删除文字
- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath {
return @"真的要删除吗";
}
此方法默认返回UITableViewCellEditingStyleDelete删除操作
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
return UITableViewCellEditingStyleInsert;
//多选
return UITableViewCellEditingStyleInsert|UITableViewCellEditingStyleDelete;
}
//移动必须实现的方法
//移动1
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
return YES;
}
//移动2
//sourceIndexPath 起始位置
//destinationIndexPath 目标位置
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath {
NSString *string = self.dataList[sourceIndexPath.row];
[self.dataList removeObjectAtIndex:sourceIndexPath.row];
[self.dataList insertObject:string atIndex:destinationIndexPath.row];
}
2、批量操作
//得到所有选中的行数
NSArray * deleteList = [self.tableView indexPathsForSelectedRows];
//创建删除对象的数组
NSMutableArray * deleteObjcList = [NSMutableArray array];
for (NSInteger i = 0; i < deleteList.count; i ++) {
NSIndexPath * index = deleteList[i];
//根据选中行数得到相应数组
NSString * string = self.dataList[index.row];
[deleteObjcList addObject:string];
}
//在数据源里删除所有选中的元素
[self.dataList removeObjectsInArray:deleteObjcList];
//批量删除动画
[self.tableView deleteRowsAtIndexPaths:deleteList withRowAnimation:UITableViewRowAnimationFade];
3、UITableViewController
(1)cell复用
第一种形式
//iOS 5.0之前使用
static NSString * identifier = @"cellID”;
UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
}
第二种形式
1.注册cell
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:identifier1];
2、dequeueReusableCellWithIdentifier
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier1 forIndexPath:indexPath];
4、自定义单元格cell
1、首先建立model类,并根据KVC进行plist中数组遍历
2、建立继承于UITableViewCell的子类, 并重写- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(nullable NSString *)reuseIdentifier 方法 进行自定义控件添加到父视图(单元格)上.
EG:[self.contentView addSubview:self.iconView];
3、并将model类头文件引入,生成对象将model类的属性赋值给自定义控件
4、在UITableView 将自定义的cell类 生成对象,并返回 数据源中的方法
//layoutSubviews(布局子视图)当执行addsubview
- (void)layoutSubviews {}添加几次调用几次
5、nib创建cell
//使用nib注册cell
[_tableView registerNib:[UINib nibWithNibName:@"SXTMessageCell" bundle:nil] forCellReuseIdentifier:identifier];
1.第一种
//从工程束里载入nib
UINib * nib = [UINib nibWithNibName:@"SXTMessageCell" bundle:nil];
//nib实例化对象
cell = [[nib instantiateWithOwner:self options:nil] lastObject];
//2.第二种
cell = [[[NSBundle mainBundle] loadNibNamed:@"SXTMessageCell" owner:self options:nil] lastObject];
// nib初始化之后第一个执行的方法
- (void)awakeFromNib {}
以上是关于UITableView 的增删改 自定义UITableViewCell的主要内容,如果未能解决你的问题,请参考以下文章
基于Form组件实现的增删改和基于ModelForm实现的增删改
jQuery自定义数组操作类(类似于List集合的增删改查)