UITableView笔记

UITableView

/*

UITableView组成:

1.tableView 表格 组成

由Section段组成

1.段头HeaderView

2.段尾FooterView

3.N个UITableViewCell

2.tableHeaderView 表头

3.tableFooterView 表尾

*/

/*

模型:ImageName  Name  FriendModel

段数组:3个模型 一个模型对应一行 sectionArr

大数组:3个段数组  dataArr

使用dataArr 将所有数据对接到表格视图的代理中

*/

//    return _dataArr.count; 返回多少段

//    return [_dataArr[section] count] 每一段有多少行

//    每一行的数据如何通过_dataArr对接 indexPath.section indexPath.row

//创建UITableView

//继承与UIScrollview

UITableView *tabview = [[UITableView alloc] initWithFrame:[UIScreen mainScreen].bounds style:UITableViewStylePlain];

设置代理:

//设置代理(处理tableView一些功能,选择,编辑,行高,section Header/footer..)

tabview.delegate = self;

//数据代理, 数据的来源(cell行数, 显示的内容)

tabview.dataSource = self;

//设置分割线

tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;

tableView.separatorColor = [UIColor blackColor];

tableView.separatorInset = UIEdgeInsetsMake(0, 50, 0, 10);

必须遵守协议<UITableViewDelegate,UITableViewDataSource>

必须实现这两个协议方法:

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

//indexPath.section    当前的组

//indexPath.row        当前的行

//第一种方式<非注册方式可以选择cell的style>

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:TabCellreuseId];

if (cell==nil) {

cell = [[UITableViewCell alloc] initWithStyle:(UITableViewCellStyleValue1) reuseIdentifier:TabCellreuseId];

}

//第二种方式

#if 0

//从复用池获取cell, 这个前面必须要注册

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:TabCellreuseId forIndexPath:indexPath];

#endif

//让箭头出现

cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

}

//返回UIView作为header/footer

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{

//先注册

//从复用池取出headerView,前面必须要注册

UITableViewHeaderFooterView *headerView = [tableView dequeueReusableHeaderFooterViewWithIdentifier:TabHeaderId];

//在次可设置header的背景色,文字headerView.contentView.backgroundColor,headerView.textLabel.text

//给headerView添加手势

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapOne:)];

[headerView addGestureRecognizer:tap];

return headerView;

}

//选中某一个cell的时候, 会调用这个函数//去下一个界面

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

[tableView deselectRowAtIndexPath:indexPath animated:YES];

DetailViewController *detailVC = [[DetailViewController alloc] init];

[self.navigationController pushViewController:detailVC animated:YES];

}

———————索引———————

//返回数组

-(Nsarray *)sectionIndex…..

//指定索引的位置

-(NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index{

if (index == 0) {

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:9 inSection:0];

[tableView scrollToRowAtIndexPath:indexPath atScrollPosition:(UITableViewScrollPositionMiddle) animated:YES];

return -1;

}

return index-1;

}

———————编辑———————

// 能否编辑(Bool)

//如何编辑(void)....comitEdit

//首先获取对应的secttion数据

NSMutableArray *mmuarr = _dataArr[indexPath.section];

if (editingStyle == UITableViewCellEditingStyleDelete) {

//删除数组元素

[mmuarr removeObjectAtIndex:indexPath.row];

//通过tableView

[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:(UITableViewRowAnimationAutomatic)];

}else if (editingStyle == UITableViewCellEditingStyleInsert){

[mmuarr insertObject:@"I‘m new" atIndex:0];

[tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:(UITableViewRowAnimationAutomatic)];

}

//多行删除(Item左右按钮Edit/trach)

//删除响应事件

-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{

//多项编辑模式

return UITableViewCellEditingStyleDelete | UITableViewCellEditingStyleInsert;

}

-(void)deleteBBIClick:(UIBarButtonItem *)bbtn{

//获取全部选中的cell的位置

NSArray *indexPaths = [self.tableView indexPathsForSelectedRows];

//从数据源里面删

//将数据保存

NSMutableArray *muarr = [[NSMutableArray alloc] init];

for (NSIndexPath *obj in indexPaths) {

[muarr addObject:_dataSource[obj.row]];

}

[_dataSource removeObjectsInArray:muarr];

//tableView删

[self.tableView  deleteRowsAtIndexPaths:indexPaths withRowAnimation:(UITableViewRowAnimationAutomatic)];

}

———移动——

—(bool)能否移动

//返回目标的位置

- (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath

{

//如果返回  sourceIndexPath 不能移动

//如果返回  proposedDestinationIndexPath 可以移动

//在同一组里面

if (sourceIndexPath.section == proposedDestinationIndexPath.section) {

return proposedDestinationIndexPath;

}

//否则, 不能跨组移动

return sourceIndexPath;

}

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath

{

//原数组

NSMutableArray *sourceArray = _dataSource[sourceIndexPath.section];

//目标数组

NSMutableArray *destArray = _dataSource[destinationIndexPath.section];

//先保存原来的数据

NSString *string = sourceArray[sourceIndexPath.row];

//删除原来数组里面的数据

[sourceArray removeObjectAtIndex:sourceIndexPath.row];

//将数据插入到新的数组里面

[destArray insertObject:string atIndex:destinationIndexPath.row];

}

时间: 2024-11-07 16:36:29

UITableView笔记的相关文章

iOS学习笔记之UITableViewController&amp;UITableView

iOS学习笔记之UITableViewController&UITableView 写在前面 上个月末到现在一直都在忙实验室的事情,与导师讨论之后,发现目前在实验室完成的工作还不足以写成毕业论文,因此需要继续思考新的算法.这是一件挺痛苦的事情,特别是在很难找到与自己研究方向相关的文献的时候.也许网格序列水印这个课题本身的研究意义就是有待考证的.尽管如此,还是要努力的思考下去.由于实验室的原因,iOS的学习进度明显受到影响,加之整理文档本身是一件耗费时间和精力的事情,因此才这么久没有写笔记了. M

iOS学习笔记(4) — UITableView的 重用机制

iOS学习笔记(4) — UITableView的 重用机制 UITableView中的cell是动态的,在使用过程中,系统会根据屏幕的高度(480)和每个cell的高度计算屏幕中需要显示的cell的个数.比如,cell高度为90.那么480 / 90 = 5 + 1,也就是说最多有6个cell能显示在屏幕中. 系统会创建1个cel池,无论tableview有多少行都只创建6个cell放在池中.当某行移出屏幕的时候,将这个cell放回在池中:当某行需要显示在屏幕中时,从池中取出一个cell. 重

UI学习笔记---第十天UITableView表视图编辑

UITableView表视图编辑 表视图编辑的使用场景 当我们需要手动添加或者删除某条数据到tableView中的时候,就可以使用tableView编辑.比如微信 扣扣中删除和某人的通话 当我们需要手动调整单元格的顺序时,就可以通过tableView移动,移动单元格到指定位置 代理AppDelegate.m中代码 #import "AppDelegate.h" #import "RootViewController.h" @implementation AppDel

iOS回顾笔记(07) -- UITableView的使用和性能优化

iOS回顾笔记(07) -- UITableView的使用和性能优化 如果问iOS中最重要的最常用的UI控件是什么,我觉得UITableView当之无愧!似乎所有常规APP都使用到了UITableView.下面就讲一讲UITableView的常用知识和使用原理及性能优化! 1.简介 UITableView故名思议是一种表格控件,是iOS应用中常用的表格控件.常见UITableView如图: UITableView继承于UIScrollview,因此它默认支持垂直滚动(只支持垂直滚动) UITab

UI学习笔记---第十一天UITableView表视图高级-自定义cell

自定义cell,多类型cell混合使用,cell自适应高度 自定义cell就是创建一个UITableViewCell的子类 把cell上的空间创建都封装在子类中,简化viewController中的代码 cell中的空间如何显示Model中的信息 cell中声明一个Model类型的属性,viewController中获取到Model对象后赋值给cell的Model属性 cell中重写Model的setter方法,把Model对象中的内容重新赋值给各个控件 M和V不直接通信,C负责M和V之间进行通

iOS学习笔记—— UItableView 控件的简单使用

UITableView 可以说是iOS开发中最常用的控件,除了游戏之外,几乎所有的应用中独会出现他的身影. 使用UITableView控件需要遵守两种协议 UITableViewDelegate和 UITableViewDataSource. 常用方法如下: 1.返回(每个分区)表单元个数(行数) - (NSInteger) tableView: (UItableView *) tableVIew numberOfRowsInSection: (NSInteger)section 2.返回表单元

2015/10/4 iOS 笔记 细节 简单-代理过程 UITableView

一.简单-代理过程 1,创建代理 @class TgFootView; @protocol TgFootViewDelegate <NSObject> @optional   可选是否实现 视图的下载按钮被点击 - (void)tgFootViewDidDownloadButtonClick:(TgFootView *)footView; @end @interface TgFootView : UIView 代理如果使用强引用,就会产生循环引用,造成控制器和子视图都无法被释放,造成内存泄露.

ios学习笔记——UITableView

UITableView是iOS中使用最频繁的视图. 一.UITableView的组成部分 1.UITableView初始化 UITableView有两个协议: 1)dataSource是UITableViewDataSource类型,主要为UITableView提供显示用的 数据(UITableViewCell),指定UITableViewCell支持的编辑操作类型 (insert,delete和 reordering),并根据用户的操作进行相应的数据更新操作,如果数据没有更具操作进行正确的更新

[菜鸟成长记]iOS开发自学笔记03-UITableView初级进阶之cell的删除

上一节在自定义UITableView表视图单元格的基础上,实现了一个简单的表视图界面,包含了一些自定义的界面元素在内.苹果的产品从iPhone到MAC都提供了多种多样的手势操作以彰显其操作的人性化,在如“邮件”等系统自带软件的表视图单元格中,每个单元格向左滑动即可在最右边出现删除按钮,以方便用户快速地对所选择行执行删除操作.其实实现这个功能并不难,仅仅只需要在ViewController中实现UITableViewDataSource协议中的方法 - (void)tableView:(UITab