UITableView小结

试着总结一下UITableView的的知识点看看自己记得多少, 如有错误请指正

使用tableView需要一个数据源和一个处理tableView事件的代理,
数据源需要遵循协议<UITableViewDataSource>, 代理需要遵循协议 <UITableViewDelegate>,
一般情况下tableView的代理为它自身所在的视图控制器

<UITableViewDataSource>有两个必须实现的方法:

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

返回每个section内有多少行:

1 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
2 {
3 return _tableArray.count;
4 }

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

当前屏幕范围内每个cell的内容,每显示一个cell, 数据源的代理会调用一次这个方法并从数据源中取出相应的数据给对应的cell


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentify = @"cellIdentify"; // 定义一个字符串作为重用池的标示
CustomTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentify]; // 尝试从重用池中取出一个已存在的cell来使用
if (!cell) { // 如果重用池中没有就创建一个新的
cell = [[CustomTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentify];
}
return cell;
}

UITableViewDataSource还有其他一些方法:

//********//

-
(NSInteger)numberOfSectionsInTableView:(UITableView
*)tableView;

返回一个tableView中有多少个section, 即多少个分组

//********//

//*******//

- (NSString
*)tableView:(UITableView *)tableView
titleForHeaderInSection:(NSInteger)section;

设置section的头部标题

//******//

//*****//

- (NSString *)tableView:(UITableView *)tableView
titleForFooterInSection:(NSInteger)section;

设置section的尾部标题

//********//

//********//

-
(NSInteger)numberOfSectionsInTableView:(UITableView
*)tableView;

如果tableView的样式是分组的话使用这个方法来设置分组的个数

//********//

等等....

UItableView的编辑模式(添加, 删除, 移动等)

首先需要开启VC的编辑模式

比如:点击按钮进入编辑模式


 1 - (void)editAction:(id)sender
2 {
3 if (self.editing == NO) {
4 self.editing = YES;
5 [_tableView setEditing:YES animated:YES];
6 } else {
7 self.editing = NO;
8 [_tableView setEditing:NO animated:YES];
9 }
10 }

再使用方法判断某个cell能否被编辑

-
(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath
*)indexPath;


1 #pragma mark - 控制cell能否被编辑
2 - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
3 {
4 // if (indexPath.row == 0) {
5 // return YES;
6 // }
7 return YES; // 直接return YES让所有cell都可编辑
8 }

实现下面的方法来设置cell的编辑样式(删除, 添加....)

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


1 #pragma mark - 控制cell的编辑样式
2 - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
3 {
4 if (indexPath.row == 0) { // 指定位置cell的编辑样式
5 return UITableViewCellEditingStyleInsert;
6 }
7 // return UITableViewCellEditingStyleDelete | UITableViewCellEditingStyleInsert; 可以连写, 多选
8 return UITableViewCellEditingStyleDelete;
9 }

实现下面的方法提交编辑结果

-
(void)tableView:(UITableView *)tableView
commitEditingStyle:(UITableViewCellEditingStyle)editingStyle
forRowAtIndexPath:(NSIndexPath *)indexPath;


 1 #pragma mark - 提交编辑
2 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
3 {
4 5 if (editingStyle == UITableViewCellEditingStyleDelete) { // 如果是删除
6 [_tableArray removeObjectAtIndex:indexPath.row];
7 [tableView reloadData]; // 修改后重新载入tableView的数据
8 }
9 if (editingStyle == UITableViewCellEditingStyleInsert) {
10 Sutdent *stu = [Sutdent studentWithImage:nil title:@"张三" phone:@"11453455" sex:@"女"];
11 [_tableArray addObject:stu];
12 [tableView reloadData];
13
14 }
15 }

实现下面的方法实现移动cell:

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


 1 - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
2 {
3 NSDictionary *sDic = _tableArr[sourceIndexPath.section];
4 NSMutableArray *sArr = [sDic[kArray] mutableCopy];
5
6 if (sourceIndexPath.section == destinationIndexPath.section) { // 如果目标位置与原位置处在同一分组
7 BookDataSource *bookData = sArr[sourceIndexPath.row];
8 [sArr removeObject:bookData];
9 [sArr insertObject:bookData atIndex:destinationIndexPath.row];
10 [sDic setValue:sArr forKey:kArray];
11 [_tableView reloadData];
12 } else {
13
14 NSDictionary *dDic = _tableArr[destinationIndexPath.section];
15 NSMutableArray *dArr = [dDic[kArray] mutableCopy];
16
17 BookDataSource *sBook = sArr[sourceIndexPath.row];
18 [sArr removeObjectAtIndex:sourceIndexPath.row];
19 [dArr insertObject:sBook atIndex:destinationIndexPath.row];
20
21 [sDic setValue:sArr forKey:kArray];
22 [dDic setValue:dArr forKey:kArray];
23
24 [_tableView reloadData];
25 }
26 }

tips :

1>自定义cell , 新建类继承与UITableViewCell类 , 在该cell中添加视图 使用 [self.contentView
addSubview:view];

其他关于Tableview的东西还没有用到以后再慢慢添加

时间: 2024-11-05 14:22:25

UITableView小结的相关文章

iOS开发UI篇—UITableview控件使用小结

iOS开发UI篇—UITableview控件使用小结 一.UITableview的使用步骤 UITableview的使用就只有简单的三个步骤: 1.告诉一共有多少组数据 方法:- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView; 2.告诉每组一共有多少行 方法:- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSIntege

OS开发UI篇—UITableview控件使用小结

一.UITableview的使用步骤 UITableview的使用就只有简单的三个步骤: 1.告诉一共有多少组数据 方法:- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView; 2.告诉每组一共有多少行 方法:- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section; 3.设置每组每行(cell) 方

swift详解之十九--------------UITableView的基本操作(下拉刷新,新增删除,分组,检索等)

UITableView的基本操作(下拉刷新,新增删除,分组,检索等) 注:本小结总结UITableview的一些基本用法 UITbleView继承自UIScrollView,只能用来显示一列数据(目前就只认识到这里),纵向滑动. 一般有两种方式来实现,直接用UITableViewController , 占满整个屏幕 .不用手动实现UITableViewDataSource 和UITableViewDelegate .另一种方式在UIViewController 中.我们看看这种方式 let t

UI开发----UITableView表视图-1

//  Created By 郭仔   2015年04月22日22:12:47 // ================================== 时间都去哪了!!!!!!! // ================================== 表视图 UITableView,iOS中最重要的视图,随处可?见. 表视图通常?用来管理?一组具有相同数据结构的数据. UITableView继承?自UIScrollView,所以可以滚动 表视图的每?一条数据都是显?示在UITableVi

猫猫学IOS(十二)UI之UITableView学习(上)LOL英雄联盟练习

猫猫分享,必须精品 素材代码地址:http://blog.csdn.net/u013357243/article/details/44706671 原文地址:http://blog.csdn.net/u013357243?viewmode=contents 先看效果图 源代码 NYViewController的代码 //ps:新建iOS交流学习群:304570962 可以加猫猫QQ:1764541256 或则微信znycat 让我们一起努力学习吧. 原文:http://blog.csdn.net

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

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

开源库UITableView+FDTemplateLayoutCell学习

摘自:优化UITableViewCell高度计算Swift版.优化UITableViewCell高度计算的那些事 本文带大家详细探索那篇文章所对应的库(1.2版),这个库就是利用缓存tableviewcell的高度提高滑动的流畅性. 主要是利用Runloop在空闲状态时,后台计算tableviewcell的高度并缓存起来.然后在使用的时候就直接从缓存中去,这里都放在一个数组里存在内存. 对Runloop以及几个mode不懂的可以看sunnyxx blog中的视频 视频可戳 , 文章的话可以看看 

iOS 键盘自适应(IQKeyboardManager)使用小结

IQKeyboardManager Github地址 经常在开发一个应用程序,我们遇到了一个问题,iPhone的键盘上滑覆盖的UITextField / UITextView.IQKeyboardManager可以防止键盘滑动问题和覆盖UITextField / UITextView无需你输入任何代码,不需要额外的设置要求.使用IQKeyboardManager你只需要添加源文件到你的项目. 主要特点 1)无代码 2)自动工作 3)没有更多的UIScrollView4)没有更多的子类 5)没有更

UITableView(转自一片枫叶)

UITableView学习笔记        作者:一片枫叶 看TableView的资料其实已经蛮久了,一直想写点儿东西,却总是因为各种原因拖延,今天晚上有时间静下心来记录一些最近学习的TableView的知识.下面进入正题,UITableView堪称UIKit里面最复杂的一个控件了,使用起来不算难,但是要用好并不容易.当使用的时候我们必须要考虑到后台数据的设计,tableViewCell的设计和重用以及tableView的效率等问题. 下面分9个方面进行介绍: 一.UITableView概述