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的更多相关文章
- 新手教程之使用Xib自定义UITableViewCell
新手教程之使用Xib自定义UITableViewCell 前言 首先:什么是UITableView?看图 其次:什么是cell? 然后:为什么要自定cell,UITableView不是自带的有cell ...
- JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(四):自定义T4模板快速生成页面
前言:上篇介绍了下ko增删改查的封装,确实节省了大量的js代码.博主是一个喜欢偷懒的人,总觉得这些基础的增删改查效果能不能通过一个什么工具直接生成页面效果,啥代码都不用写了,那该多爽.于是研究了下T4 ...
- 使用EF自带的EntityState枚举和自定义枚举实现单个和多个实体的增删改查
本文目录 使用EntityState枚举实现单个实体的增/删/改 增加:DbSet.Add = > EntityState.Added 标记实体为未改变:EntityState.Unchange ...
- 基于Entity Framework的自定义分页,增删改的通用实现
简介 之前写个一个基于Dapper的分页实现,现在再来写一个基于Entity Framework的分页实现,以及增删改的通用实现. 代码 还是先上代码:https://github.com/jinwe ...
- day84-仿照admin实现一个自定义的增删改查组件
一.admin的使用 app01的admin.py文件: class BookConfig(admin.ModelAdmin): list_display=[] list_display_links= ...
- 一、数据库表中字段的增删改查,二、路由基础.三、有名无名分组.四、多app共存的路由分配.五、多app共存时模板冲突问题.六、创建app流程.七、路由分发.八、路由别名,九、名称空间.十、反向解析.十一、2.x新特性.十二、自定义转换器
一.数据库表中字段的增删改查 ''' 直接在modules中对字段进行增删改查 然后在tools下点击Run manage.py Task执行makemigrations和migrate 注意在执行字 ...
- 自定义对象使用 ArrayList 进行增删改查(dos程序)
马上要进行java基础考试了,闲着写一次博客,把这10周学的东西过一遍,可能没过全,.....但是我觉得增删改查是必须的,以前一直不会用ArrayList 自定义对象....... 案例如下:自己根 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - 自定义仓储之增删改查
上一篇文章(https://www.cnblogs.com/meowv/p/12913676.html)我们用Code-First的方式创建了博客所需的实体类,生成了数据库表,完成了对EF Core的 ...
- ztree : 增删改功能demo与自定义DOM功能demo的结合
最近有个项目要用ztree,需要用ztree自带的功能(增删改),也需要自定义DOM的功能(置顶). ztree的demo里有增删改的demo,也有自定义DOM的demo,但没有两者结合的. 所以我把 ...
随机推荐
- 实现LoadRunner多个场景的顺序执行
应用场景假设有3个不同的测试场景,分别为并发登录.核心业务.可靠性测试,3个场景有先后执行顺序.由于白天测试机器另有用处,只能在晚上进行性能测试,这时我们的期望是能否把测试场景都设定好之后晚上自动运行 ...
- AJAX制作JSON格式的实时更新数据的方法
之前有写过这样的文章,但是出现了几个问题,第一,如果每秒都像数据库发送请求势必会造成服务器的压力过大,第二,如果使用JS的话,是不可以取得系统时间的,因为JS运行在客户端,所以只能取得客户端时间, 如 ...
- 4.接口隔离原则(Interface Segregation Principle)
1.定义 客户端不应该依赖它不需要的接口: 一个类对另一个类的依赖应该建立在最小的接口上. 2.定义解读 定义包含三层含义: 一个类对另一个类的依赖应该建立在最小的接口上: 一个接口代表一个角色,不应 ...
- 实战项目:通过当当API将订单抓取到SAP(二)
上一篇博客,我们引用了log4net 这个.这里简单介绍下,为什么引用这个. log4net是记录程序日志信息的,是一个功能著名的开源日志记录组件.利用log4net可以方便地将日志信息记录到文件.控 ...
- Educational Codeforces Round 7 D. Optimal Number Permutation 构造题
D. Optimal Number Permutation 题目连接: http://www.codeforces.com/contest/622/problem/D Description You ...
- hdu 5264 pog loves szh I 水题
pog loves szh I Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?p ...
- [转]O(n)回文子串算法 Manacher算法
这里,我介绍一下O(n)回文串处理的一种方法.Manacher算法.原文地址:http://zhuhongcheng.wordpress.com/2009/08/02/a-simple-linear- ...
- Cocos2d-x--开发参考资料
1.CocoStudio使用指南 所用版本:CocoStudio v3.0.0 Cocos2d-x1.5b 自己网上查找并整理的一些资料,留下做个纪念,也希望对有需要的人有点帮助 链接地址:http: ...
- [NOIP 2014复习]第三章:动态规划——NOIP历届真题回想
背包型动态规划 1.Wikioi 1047 邮票面值设计 题目描写叙述 Description 给定一个信封,最多仅仅同意粘贴N张邮票,计算在给定K(N+K≤40)种邮票的情况下(假定全部的邮票数量都 ...
- MySQL中部分系统变量介绍
have_symlink DISABLED YES 用以支持在表定义中指 ...