一、掌握

(1) 设置UITableView的dataSource、delegate

(2) UITableView多组数据和单组数据的展示

(3) UITableViewCell的常见属性

(4) UITableView的性能优化(cell的循环利用)

(5) 自定义Cell

二、基本概念

(1) 什么是UITableView

  a) 在众多移动应用中,能看到各式各样的表格数据

  b) 在iOS中,要实现表格数据展示,最常用的做法就是使用UITableView

  c) UITableView继承自UIScrollView,因此支持垂直滚动,而且性能极佳

(2) UITableView的两种样式

  

三、数据源

(1) 如何展示数据

  a) UITableView需要一个数据源(dataSource)来显示数据

  b) UITableView会向数据源查询一共有多少行数据以及每一行显示什么数据等

  c) 没有设置数据源的UITableView只是个空壳

  d) 凡是遵守UITableViewDataSource协议的OC对象,都可以是UITableView的数据源

(2) tableView和数据源

(3) tableView展示数据的过程

  a) 调用数据源的下面方法得知一共有多少组数据

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

  b) 调用数据源的下面方法得知每一组有多少行数据

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

  c) 调用数据源的下面方法得知每一行显示什么内容

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

(4) 字典转模型

  

四、MVC

(1) 初始MVC

  a) MVC是一种设计思想,贯穿于整个iOS开发中,需要积累一定的项目经验,才能深刻体会其中的含义和好处

  b) MVC中的三个角色

    M:Model,模型数据
    V:View,视图(界面)
    C:Control,控制中心

  c) MVC的几个明显的特征和体现:

1、View上面显示什么东西,取决于Model
2、只要Model数据改了,View的显示状态会跟着更改
3、Control负责初始化Model,并将Model传递给View去解析展示

五、Cell

(1) Cell简介

  a) UITableView的每一行都是一个UITableViewCell,通过dataSource的tableView:cellForRowAtIndexPath:方法来初始化每一行

  b) UITableViewCell内部有个默认的子视图:contentView,contentView是UITableViewCell所显示内容的父视图,可显示一些辅助指示视图

  c) 辅助指示视图的作用是显示一个表示动作的图标,可以通过设置UITableViewCell的accessoryType来显示,默认是UITableViewCellAccessoryNone(不显示辅助指示视图),其他值如下:

    UITableViewCellAccessoryDisclosureIndicator
    UITableViewCellAccessoryDetailDisclosureButton
    UITableViewCellAccessoryCheckmark

  d) 还可以通过cell的accessoryView属性来自定义辅助指示视图(比如往右边放一个开关)

(2) UITableViewCell的contentView

  a) contentView下默认有3个子视图

    其中2个是UILabel(通过UITableViewCell的textLabel和detailTextLabel属性访问)
    第3个是UIImageView(通过UITableViewCell的imageView属性访问)

  b) UITableViewCell还有一个UITableViewCellStyle属性,用于决定使用contentView的哪些子视图,以及这些子视图在contentView中的位置

(3) UITableViewCell结构

六、性能优化

(1) Cell的重用原理

  a) iOS设备的内存有限,如果用UITableView显示成千上万条数据,就需要成千上万个UITableViewCell对象的话,那将会耗尽iOS设备的内存。要解决该问题,需要重用UITableViewCell对象

  b) 重用原理:当滚动列表时,部分UITableViewCell会移出窗口,UITableView会将窗口外的UITableViewCell放入一个对象池中,等待重用。当UITableView要求dataSource返回UITableViewCell时,dataSource会先查看这个对象池,如果池中有未使用的UITableViewCell,dataSource会用新的数据配置这个UITableViewCell,然后返回给UITableView,重新显示到窗口中,从而避免创建新对象

  c) 还有一个非常重要的问题:有时候需要自定义UITableViewCell(用一个子类继承UITableViewCell),而且每一行用的不一定是同一种UITableViewCell,所以一个UITableView可能拥有不同类型的UITableViewCell,对象池中也会有很多不同类型的UITableViewCell,那么UITableView在重用UITableViewCell时可能会得到错误类型的UITableViewCell

  d) 解决方案:UITableViewCell有个NSString *reuseIdentifier属性,可以在初始化UITableViewCell的时候传入一个特定的字符串标识来设置reuseIdentifier(一般用UITableViewCell的类名)。当UITableView要求dataSource返回UITableViewCell时,先通过一个字符串标识到对象池中查找对应类型的UITableViewCell对象,如果有,就重用,如果没有,就传入这个字符串标识来初始化一个UITableViewCell对象

(2) Cell的重用代码

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

  {

   // 1.定义一个cell的标识

   static NSString *ID = @"mjcell";

      // 2.从缓存池中取出cell

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];

  // 3.如果缓存池中没有cell

    if (cell == nil) {

    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];

   }  

   // 4.设置cell的属性...

    return cell;

  }

转载于:https://www.cnblogs.com/fy3344520/p/4366598.html

ios--小结系列六相关推荐

  1. iOS动画系列之八:使用CAShapeLayer绘画动态流量图

    这篇文章通过使用CAShapeLayer和UIBezierPath来画出一个动态显示剩余流量的小动画. 最终实现的效果如下: Paste_Image.png 动态效果图: shapeLayerAni. ...

  2. iOS动画系列之九:实现点赞的动画及播放起伏指示器

    iOS动画系列,共十篇.现在写到第九篇啦.感兴趣的可以通过下面的传输门进到其他几篇文章里面. 第一篇:iOS动画系列之一:通过实战学习CALayer和透视的原理.做一个带时分秒指针的时钟动画(上) 第 ...

  3. iOS动画系列之五:基础动画之缩放篇旋转篇Swift+OC

    这一篇主要介绍基础动画之缩放和旋转.这些基本操作分享完之后,我想想可以找个稍微复杂一点点的动画做做啦. 这篇继续基础篇,分享一下缩放和旋转.因为整体思路和平移基本上没有变化,加上源代码里面也有OC版本 ...

  4. iOS开发系列--让你的应用“动”起来

    概览 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌.在这里你可以看到iOS中如何使用图层精简非交互式绘图,如何通过核心动画创建基础动画.关键帧动画 ...

  5. iOS开发系列--通知与消息机制

    http://www.cocoachina.com/ios/20150318/11364.html 概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣 ...

  6. iOS开发系列--UITableView全面解析

    iOS开发系列--UITableView全面解析 2014-08-23 23:20 by KenshinCui, 2202 阅读, 18 评论, 收藏,  编辑 --UIKit之UITableView ...

  7. Silverlight Blend动画设计系列六:动画技巧(Animation Techniques)之对象与路径转化、波感特效...

    原文:Silverlight & Blend动画设计系列六:动画技巧(Animation Techniques)之对象与路径转化.波感特效 当我们在进行Silverlight & Bl ...

  8. IOS开发系列--IOS程序开发概览

    IOS开发系列--IOS程序开发概览 2014-08-04 19:42 by KenshinCui, 9983 阅读, 51 评论, 收藏, 编辑 概览 终于到了真正接触IOS应用程序的时刻了,之前我 ...

  9. iOS开发系列--网络开发(转)

    iOS开发系列--网络开发 2014-10-22 08:34 by KenshinCui, 66365 阅读, 56 评论, 收藏, 编辑 概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微 ...

  10. xen虚拟化实战系列(六)之xen虚拟机破解密码

    xen虚拟化实战系列文章列表 xen虚拟化实战系列(一)之xen虚拟化环境安装 xen虚拟化实战系列(二)之xen虚拟机安装 xen虚拟化实战系列(三)之xen虚拟机复制 xen虚拟化实战系列(四)之 ...

最新文章

  1. 【青少年编程竞赛交流】10月份微信图文索引
  2. vector的初始化和遍历
  3. 软件工程--软件计划
  4. H5页面在 ios 端滑动不流畅的问题
  5. 卡特兰数(简单说说)
  6. 一般左边后台点击收缩展开的效果
  7. IPLAT62--弹窗
  8. 二元函数对xy同时求导_2020.5.6 | 考研数学—多元函数微分学重要考点攻克
  9. uniapp使用阿里巴巴在线图标库
  10. python教程马哥_【60集全】全新马哥教育 运维必备python基础语法全讲解_IT教程网...
  11. python 计算均值 方差 标准差
  12. 一些EXCHANGE命令
  13. 《英语语法新思维初级教程》学习笔记(四)数量限定词和个体限定词
  14. php orm中关联查询,【整理】Laravel中Eloquent ORM 关联关系的操作
  15. 百度分享支持https
  16. Mac 上删除键(delete)的妙用
  17. iOS生成图片分享到微信的一种方法
  18. php zen kaku代表什么,Convert kana one from another (zen-kaku, han-kaku and more) - PHP 7 中文文档...
  19. 华为发生工商变更,瞄准5G车联网大蛋糕!(附产业重要数据下载)
  20. Simulink转FMU模型到Modelica仿真平台调用

热门文章

  1. UVa 11992 (线段树 区间修改) Fast Matrix Operations
  2. 【BZOJ】【3669】【NOI2014】魔法森林
  3. 是时候重构下自己的博客了
  4. C#中的文件流和文本流
  5. (转)oracle表分区详解
  6. Js获取当前系统时间,24小时制
  7. java父类静态 子类调用_在java 中 父类定义的静态方法 子类 调用时候 如何 知道 是哪个子类调用的...
  8. 基于SkyEye的MPC5554 片上Flash实现
  9. MySQL深度剖析之undo log redo log binlog专题(2021)
  10. Hive之架构 功能