UITableView整理

1.UITableView有两种样式:

  1. [[UITableView alloc] initWithFrame:view.bounds style:UITableViewStylePlain];
  2. [[UITableView alloc] initWithFrame:view.bounds style:UITableViewStyleGrouped];

2.UITableView的结构:

UITableView由头部,尾部,和中间一连串的单元格组成,UITableView的头部由tableHeaderView属性设置,尾部由tableFooterView属性设置,中间的

行高可通过rowHeight属性设置

  1. _listArray = [[UIFont familyNames] retain];//获取所有字体名称
  2. _tableView = [[UITableView alloc] initWithFrame:view.bounds style:UITableViewStylePlain];
  3. // 设置数据源
  4. _tableView.dataSource = self;
  5. // 设置代理
  6. _tableView.delegate = self;
  7. // 设置表视图cell的高度,统一的高度
  8. _tableView.rowHeight = 70;    // 默认44px
  9. // 设置表视图的背景
  10. UIImageView *backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"IMG_0410"]];
  11. _tableView.backgroundView = backgroundView;
  12. [backgroundView release];
  13. // 设置表视图的颜色
  14. _tableView.backgroundColor = [UIColor yellowColor];
  15. // 设置表视图的分割线的颜色
  16. _tableView.separatorColor = [UIColor purpleColor];
  17. // 设置表视图的分割线的风格
  18. _tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
  19. // 设置表视图的头部视图(headView 添加子视图)
  20. UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 80)];
  21. headerView.backgroundColor = [UIColor redColor];
  22. // 添加子视图
  23. UILabel *headText = [[UILabel alloc] initWithFrame:CGRectMake(60, 0, 200, 80)];
  24. headText.text = @"天晴朗,天晴朗天晴朗天晴朗!";
  25. headText.numberOfLines = 0;
  26. [headerView addSubview:headText];
  27. [headText release];
  28. _tableView.tableHeaderView = headerView; //设置头部
  29. [headerView release];
  30. // 设置表视图的尾部视图(footerView 添加子视图)
  31. UIView *footerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 80)];
  32. footerView.backgroundColor = [UIColor yellowColor];
  33. _tableView.tableFooterView = footerView;  //设置尾部
  34. [footerView release];

UITableView的一些常用属性

[objc] view plaincopy

  1. //设置UITableView分割线风格
  2. @property(nonatomic) UITableViewCellSeparatorStyle separatorStyle;
  3. //设置UITableView分割线颜色,默认为标准灰色
  4. @property(nonatomic,retain) UIColor               *separatorColor;
  5. //设置UITableView的头部
  6. @property(nonatomic,retain) UIView *tableHeaderView;
  7. //设置UITableView的尾部
  8. @property(nonatomic,retain) UIView *tableFooterView;
  9. //设置UITableView的Cell的高度
  10. @property (nonatomic)          CGFloat                     rowHeight;
  11. //设置UITableView种section的头部的高度
  12. @property (nonatomic)          CGFloat                     sectionHeaderHeight;
  13. //设置UITableView种section的尾部的高度
  14. @property (nonatomic)          CGFloat                     sectionFooterHeight;
  15. //设置UITableView的背景
  16. @property(nonatomic, readwrite, retain) UIView *backgroundView NS_AVAILABLE_IOS(3_2);
  17. //设置UITableView是否可编辑,默认为no,不可编辑
  18. @property(nonatomic,getter=isEditing) BOOL editing;
  19. - (void)setEditing:(BOOL)editing animated:(BOOL)animated;//方法带有动画效果
  20. //当UITableView不在编辑时,cell是否可以选中,默认为yes
  21. @property(nonatomic) BOOL allowsSelection NS_AVAILABLE_IOS(3_0);
  22. //当UITableView在编辑时,cell是否可以选中,默认为no
  23. @property(nonatomic) BOOL allowsSelectionDuringEditing;
  24. //当UITableView不在编辑时,cell是否可以选中多个,默认为no
  25. @property(nonatomic) BOOL allowsMultipleSelection NS_AVAILABLE_IOS(5_0);
  26. //当UITableView在编辑时,cell是否可以选中多个,默认为no
  27. @property(nonatomic) BOOL allowsMultipleSelectionDuringEditing NS_AVAILABLE_IOS(5_0);

UITableView的一些常用方法:

  1. //整体刷新UITableView
  2. - (void)reloadData;
  1. //指定一个cell,返回一个NSIndexPath,如果cell没有,返回nil
  2. - (NSIndexPath *)indexPathForCell:(UITableViewCell *)cell;
  3. //指定一个范围,返回一组NSIndexPath,如果rect无效,返回nil
  4. - (NSArray *)indexPathsForRowsInRect:(CGRect)rect;
  5. //指定一个NSIndexPath,返回一个cell
  6. - (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath;
  7. //返回所有显示的cell
  8. - (NSArray *)visibleCells;
  9. //返回所有显示的cell的NSIndexPath
  10. - (NSArray *)indexPathsForVisibleRows;

UITableView的一些编辑方法:

  1. //插入一个cell到指定的indexPaths位置,指定一个动画效果
  2. - (void)insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;
  3. //删除indexPaths位置的cell,指定一个动画效果
  4. - (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;
  5. //刷新indexPaths位置的cell,指定一个动画效果(tableView的局部刷新,一般用于cell的位置不改变,又不想刷新整个tableView时)
  6. - (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation NS_AVAILABLE_IOS(3_0);
  7. //移动indexPaths位置的cell,指定一个动画效果
  8. - (void)moveRowAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath NS_AVAILABLE_IOS(5_0);

UITableView数据源方法

  1. //UITableView有多少个组
  2. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
  3. return 1;//默认为1
  4. }
  5. //UITableView每组有多少条数据
  6. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
  7. {
  8. return [_listArray count];
  9. }
  10. //创建一个cell
  11. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  12. {
  13. static NSString *cellIdentifier = @"cell";
  14. UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
  15. if (cell == nil) {
  16. cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier] autorelease];
  17. //cell的四种样式
  18. //UITableViewCellStyleDefault,       只显示图片和标题
  19. //UITableViewCellStyleValue1,        显示图片,标题和子标题(子标题在右边)
  20. //UITableViewCellStyleValue2,        标题和子标题
  21. //UITableViewCellStyleSubtitle       显示图片,标题和子标题(子标题在下边)
  22. }
  23. // 指向其中一行
  24. //    cell.textLabel.text = [self.listArray objectAtIndex:indexPath.row];//设置cell的标题
  25. cell.textLabel.textColor = [UIColor redColor];//设置标题字体颜色
  26. cell.textLabel.font = [UIFont fontWithName:fontName size:18];//设置标题字体大小
  27. cell.imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@""]];//设置cell的图片
  28. cell.detailTextLabel = @"detailTextLabel"// 设置cell的子标题
  29. return cell;
  30. }
  1. //设置组头部的文字
  2. - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;
  3. //设置组尾部的文字
  4. - (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section;
  1. //指定cell是否可编辑
  2. - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath;
  3. //指定cell是否可移动
  4. - (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath;
  5. //提交编辑操作,重写此方法,自动实现cell左滑动删除功能
  6. - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath;
  7. // 移动cell
  8. - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath;
  1. //右边索引显示的内容
  2. - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
  3. {
  4. return _keyArray;
  5. }
  6. // 点击右边索引跳转到哪个index位置
  7. - (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index
  8. {
  9. return index;
  10. }

UITalbeView常用的代理方法

  1. //cell的行高
  2. - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
  3. //组头部的高度
  4. - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;
  5. //组尾部的高度
  6. - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;
  7. //自定义组头部视图,此方法和数据源中设置头部标题的方法只能实现一个
  8. - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;   // custom view for header. will be adjusted to default or specified header height
  9. //自定义组尾部视图,此方法和数据源中设置尾部标题的方法只能实现一个
  10. - (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section;
  11. //点击cell时调用
  12. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
  13. //取消点击cell时调用
  14. - (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(3_0);

UITableViewCell的一些辅助功能

//sell的选中样式

  1. cell.selectionStyle = UITableViewCellSelectionStyleBlue;

如果想选中后取消,在didSelectRowAtIndexPath方法中调用

  1. [tableView deselectRowAtIndexPath:indexPath animated:YES];或
  2. [self performSelector:@selector(deselectRowAtIndexPath:animated:) withObject:indexPath afterDelay:.5];

如果想在cell的右边出现选中状态或箭头可以设置下面的属性

  1. cell.accessoryType = UITableViewCellAccessoryCheckmark;

cell根据文字的多少自适应高度

  1. - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
  2. {
  3. // wrong  UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
  4. NSString *text = [_listArray objectAtIndex:indexPath.row];
  5. //320为文字显示的宽度,高度1000是随便写的,会自动根据文字的大小和宽度计算出高度
  6. CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:CGSizeMake(320, 1000)];
  7. // +20是为了让每个cell之间有些间隔
  8. return size.height+20;
  9. }
  1. //这样写在IOS7.0以后 TableViewCell的分割线就不会往右挫15个像素点了
  2. UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SimpleTableIdentifier];
  3. [tableViewsetSeparatorInset:UIEdgeInsetsMake(0,0,0,0)];
时间: 2024-08-03 15:49:11

UITableView整理的相关文章

UITableView用法整理

UITableView是最常用的控件,这里整理下常用方法,outline如下(本文参考http://www.cnblogs.com/kenshincui/p/3931948.html,代码下载地址为https://github.com/zanglitao/tableviewdemo) 1:基本介绍 2:数据源 3:代理 4:修改,删除,添加和排序 5:背景view 6:自定义cell 7:UITableViewController 8:UISearchdisplayController 9:下拉

详细整理:UITableView优化技巧

最近在微博上看到一个很好的开源项目VVeboTableViewDemo,是关于如何优化UITableView的.加上正好最近也在优化项目中的类似朋友圈功能这块,思考了很多关于UITableView的优化技巧,相信这块是难点也是痛点,所以决定详细的整理下我对优化UITableView的理解. UITableView作为iOS开发中最重要的控件之一,其中的实现原理很是考究.Apple在这块的优化水平直接决定了iOS的体验能甩安卓几条街,哈哈,扯淡扯多了...好了,废话不多说,直接进入主题.首先来谈谈

[转] 详细整理:UITableView优化技巧

原文:http://www.cocoachina.com/ios/20150602/11968.html 最近在微博上看到一个很好的开源项目VVeboTableViewDemo,是关于如何优化UITableView的.加上正好最近也在优化项目中的类似朋友圈功能这块,思考了很多关于UITableView的优化技巧,相信这块是难点也是痛点,所以决定详细的整理下我对优化UITableView的理解. UITableView作为iOS开发中最重要的控件之一,其中的实现原理很是考究.Apple在这块的优化

UITableView优化技巧整理

一.tableView和cell都尽量少用或者不用clearColor 二.按需加载cell的内容.当用户高速滑动的时候,只加载目标行前后的几行数据,减少不必要的渲染和加载对程序性能的消耗. 三.异步绘制.异步draw(),或者重写drawRect() 四.提前计算并缓存好高度(布局),因为heightForRowAtIndexPath:是调用最频繁的方法. 五.尽量少用addView给Cell动态添加View,可以初始化时就添加,然后通过hide来控制是否显示. 六.减少subviews的数量

文顶顶iOS开发博客链接整理及部分项目源代码下载

文顶顶iOS开发博客链接整理及部分项目源代码下载 网上的iOS开发的教程很多,但是像cnblogs博主文顶顶的博客这样内容图文并茂,代码齐全,示例经典,原理也有阐述,覆盖面宽广,自成系统的系列教程却很难找.如果你是初学者,在学习了斯坦福iOS7公开课和跟着文顶顶的博客做项目之后,最快只需要2个月时间,就基本可以独立完成iOS App的开发工作.有经验的开发者也可以在该博客中寻找代码片段进行学习借鉴,必有所收获. 在此也向@文顶顶 表示严重感谢! 由于文顶顶博客博文繁多,每次找文章需要频繁的翻页,

iOS学习笔记之UITableViewController&UITableView

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

UITableView优化技巧

最近在微博上看到一个很好的开源项目VVeboTableViewDemo,是关于如何优化UITableView的.加上正好最近也在优化项目中的类似朋友圈功能这块,思考了很多关于UITableView的优化技巧,相信这块是难点也是痛点,所以决定详细的整理下我对优化UITableView的理解. UITableView作为iOS开发中最重要的控件之一,其中的实现原理很是考究.Apple在这块的优化水平直接决定了iOS的体验能甩安卓几条街,哈哈,扯淡扯多了...好了,废话不多说,直接进入主题.首先来谈谈

我收录整理的优秀OC技术类文章

自定义导航按钮UIBarButtonItem 关于导航栏的六个小技巧 ios开发的一些小技巧篇一 制作一个可以滑动操作的 Table View Cell - IOS - 伯乐在线 一个iOS开发者的修真之路 - IOS - 伯乐在线 iOS性能优化 - IOS - 伯乐在线 block没那么难(一):block的实现 - 作业部落 Cmd Markdown 编辑阅读器 ARC 下内存泄露的那些点 - 作业部落 Cmd Markdown 编辑阅读器 产品经理日常工作职责分析与整理 - 大宝 - 博

iOS开发笔记 整理(全)

退回输入键盘 - (BOOL)textFieldShouldReturn:(id)textField{ [textField resignFirstResponder]; } CGRect CGRect frame = CGRectMake (origin.x,origin.y, size.width, size.height):矩形 NSStringFromCGRect(someCG) 把CGRect结构转变为格式化字符串: CGRectFromString(aString) 由字符串恢复出矩