UITableView 的增删改 自定义UITableViewCell

1、UITableView的增删改

//设置编辑模式

[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 {}

时间: 2024-10-22 03:33:11

UITableView 的增删改 自定义UITableViewCell的相关文章

UITableView的增删改插

//  AppDelegate.m文件 #import "AppDelegate.h" #import "RootTableViewController.h" @interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)l

UITableView编辑 增删改查

@interface RootTableViewController () @property (nonatomic , retain) NSMutableArray *dataArray; //用数组管理表视图将要显示的数据 @end @implementation RootTableViewController //新的重用机制格式 //1.定义全局区的静态重用标识符 static NSString *identifier = @"CELL"; //重写属性的getter方法 - 

基于Entity Framework的自定义分页,增删改的通用实现

简介 之前写个一个基于Dapper的分页实现,现在再来写一个基于Entity Framework的分页实现,以及增删改的通用实现. 代码 还是先上代码:https://github.com/jinweijie/EF.GenericRepository 如何运行示例 还是像先前一样: 1. 先Clone下代码,在Database里面解压缩Database.7z 2. Attach到Sql Server LocalDB上.如果你用的不是Sql Server的LocalDB,你需要更改App.Conf

BootstrapTable+KnockoutJS自定义T4模板快速生成增删改查页面

前言:上篇介绍了下ko增删改查的封装,确实节省了大量的js代码.博主是一个喜欢偷懒的人,总觉得这些基础的增删改查效果能不能通过一个什么工具直接生成页面效果,啥代码都不用写了,那该多爽.于是研究了下T4的语法,虽然没有完全掌握,但是算是有了一个大致的了解.于是乎有了今天的这篇文章:通过T4模板快速生成页面. KnockoutJS系列文章: JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(一) JS组件系列——BootstrapTable+KnockoutJS

ztree : 增删改功能demo与自定义DOM功能demo的结合

最近有个项目要用ztree,需要用ztree自带的功能(增删改),也需要自定义DOM的功能(置顶). ztree的demo里有增删改的demo,也有自定义DOM的demo,但没有两者结合的. 所以我把demo改了一下,两个功能合在了一起. 上代码. <!DOCTYPE html> <HTML> <HEAD> <TITLE> ZTREE DEMO - edit</TITLE> <meta http-equiv="content-ty

一、数据库表中字段的增删改查,二、路由基础.三、有名无名分组.四、多app共存的路由分配.五、多app共存时模板冲突问题.六、创建app流程.七、路由分发.八、路由别名,九、名称空间.十、反向解析.十一、2.x新特性.十二、自定义转换器

一.数据库表中字段的增删改查 ''' 直接在modules中对字段进行增删改查 然后在tools下点击Run manage.py Task执行makemigrations和migrate 注意在执行字段的删除过程中需不需要对数据进行备份 ''' 二.路由基础 ''' # url中含有四个参数 # url(regex, view, kwargs=None, name=None) # 正则路径 视图函数地址 默认关键字参数(了解) 路由别名 # r'index' 只要请求中含有index都可以匹配成

iOS CoreData 增删改查详解

最近在学习CoreData, 因为项目开发中需要,特意学习和整理了一下,整理出来方便以后使用和同行借鉴.目前开发使用的Swift语言开发的项目.所以整理出来的是Swift版本,OC我就放弃了. 虽然Swift3 已经有了,目前整理的这个版本是Swift2 的.Swift 3 的话有些新特性. 需要另外调整,后续有时间再整理. 继承CoreData有两种方式: 创建项目时集成 这种方式是自动继承在AppDelegate里面,调用的使用需要通过UIApplication的方式来获取AppDelega

IOS之分析网易新闻存储数据(CoreData的使用,增删改查)

用过网易新闻客户端的朋友们都知道,获取新闻列表时有的时候他会请求网络有时候不会,查看某条新闻的时候再返回会标注已经查看的效果,接下来分析一下是如何实现的. 首先: 1.网易新闻用CoreData存储了新闻列表,因为我打开网易新闻的Documents时看到了三个文件: newsapp.sqlite,newsapp.sqlite-shm,newsapp.sqlite-wal:这三个文件是你在用CoreData时自动生成的.所以我确定他是用coredata存储的数据而不是sqlite数据库.(Core

LinQ 创建连接、简单增删改查

LINQ--语言集成查询(Language Integrated Query)是一组用于c#和Visual Basic语言的扩展.它允许编写C#或者Visual Basic代码以查询数据库相同的方式操作内存数据. 创建连接: 添加新项→LinQ to sql类→重命名为需要用的数据库名→服务器资源管理器→连接到数据库→填写服务器名.用户名密码.连接到数据库的名称→从数据连接中要到要引用的表拖进 数据库名.dbml 中 增删改查表达式 查询: 新建类:数据访问类,添加方法: Data0617Dat