关于 cell 的 三种方式缓存池
code:最原始的方法
1.创建标识
2.去缓存池查找
3.找不到哦 ,新建一个(新建一个)storyboard(拖拽一个tableViewController控制器)
去除了新建一个的代码,直接将创建的标识写入main.storyboard中的cell的identifier上storyboard 中viewController 中拖拽一个 tableview 控件
默认是没有cell给创建出来的(跟2的区别要弄清楚)
在TableView 中右侧的导航栏中选择 prototype cells 为3
这样的话就能创建三个cell出来
这里就和2 一模一样了创建xib 中拖拽每一个cell所需要的控件 然后在相应类里面对控件的数据利用拿到的模型model赋值
(创建xib的时候有俩种形式)
1.创建cell类的时候勾选底部xib
2.先创建cell类然后创建xib 然后对xib进行类的关联(其实就是省去了代码创建控件然后做代码做布局的步骤而已)
如果要建立多个不同的cell ,通过第三种方式的话就需要创建不同多个相应的cell类(一个xib对应一个cell类)
下面是我在学习本章知识点的时候写的零散笔记
要使用一个tableView的完整步骤
创建tableview
设置数据源代理
遵守协议
实现数据源跟代理方法
就能监听 tableview的行为 也能告诉tableveiw显示东西
总结 : 数据 监听点击
运行程序崩溃: 新建一个tableViewController 在main.Story里面,如果不新建,直接给class所属类运行过后没有结果; 因为原来默认的是UIViewController 而不是UITableViewController
运行黑屏: 如果不修改自定义的 UITableViewController类会出现黑屏的现象
拖拽的UITableViewController里面有一个cell 这个cell 可以替代之前第一种如果缓存池中没有cell 则代码新建一个cell
现在代码新建cell的步骤就不用了(你就理解成为系统已经默认给我们创建好了一个cell让我们重用) 只需将main.storyboard 里面的cell identifer 改为你要去缓存池中查找的时候的那个标识符就行了。
记住 这俩种方法大同小异,一个是收到创建 一个是系统给定了 不要矛盾 分开去看
cell 内部有一个 contentView (相当于cell里面所有控件的容器)
苹果官方建议 以后cell里面要放控件的话,就对contentView里面去就好了。
如果这句话你不理解也没有关系,你可以想cell内部拖拽控价,你发现,控件默认在contentView内部作为子控件。
tableView 性能优化
总结2 storyBoard 方式cell;
先去缓存池中找, 这一步都是一样的
区别的就是,在你告诉他怎么找这一步上面?
我们现在讨论的是:在storyboard contentView里面 创建不同的cell, 通过identifier 来区分不同cell,这样在加载cell的时候
就能加载不同类型的cell了。
demo:团购
通过storyboard中默认给出的cell
- 在storyboard中拖拽控件 , 默认系统给了3个,如果用代码的方式必须重新创建新的视图或者控件
- identifier 别忘了一定要和代码中定义的重用标识符一致。
- 模拟加载数据 用plist
- 新建 model(模型) 字典转模型
- 懒加载(将字典转为相应的模型)
- 方法一
给cell内部每一个控件绑定tag 10 20 30 40
用处:在我们给cell赋值的时候:
UIImageView *iconView =(UIImageView*)[cell viewWithTag:10];
iconView.image = [UIImageiamgeNamed:deal.icon];
tag 为 20 30 40 的 就不列举了
通过这个繁琐的方法也能将plist 里面的数据添加到 cell 的控件上
更简单的方式是新建一个类:cell类
在类里面我们设置空间属性,在上面的地方只需要拿到plist里面的数据传进来即可,这样达到将数据封装了
方法二:新建一个类 xxcell(XMGDealCell):给控件赋值操作就转移到这类内部,这样以后再修改程序的时候就能很方便的找到要修改的地方