IOS开发实训第八周周报

依然范特西╮ 提交于 2020-01-30 05:10:40

IOS开发实训第八周周报


总结:

根据小组分工,本周我学习的知识点有:对于个人页面的用户收藏列表和浏览列表,进行优化,包括:

(1)如何进行UITableViewCell的格式自定义

(2)UITableViewCell自适应地高度

(3)学习UITableViewCell的缓存机制


学习知识点归纳

1. 自定义UITableViewCell

自定义UITableViewCell有两种形式:纯代码定义与xib格式定义

(1)纯代码定义

创建UITableViewCell的子类,作为自定义Cell,并重写初始化函数:initWithStyle:withReuseableCellIdentifier,完成Cell内部子控件的声明与加载;

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if(self)
    {
        [self setMyView];
    }
    return self;
}

在使用之前,需要为这个Cell注册一个CellIdentifier,以便于系统缓存重用的cell:

[ tableView registerClass:[FooterCell Class] forCellReuseIdentifier:CellIdentifier];

当我们需要获取特定row的cell时,重写cellForRowAtIndexPath方法:先检查是否有可重用的cell,若有,通过dequeueReusableCellWithIdentifier方法获取;若无,通过UITableViewCell的initWithStyle方式创建;

FooterCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];  

(2)xib定义

在创建自定义UITableViewCell的头文件和源文件时,标明继承自UITableViewCell类,并同时创建xib文件,通过拖动控件和建立关联的形式,在xib文件中设计好cell的格式,并在属性栏直接填写CellIdentifier进行注册;

2. UITableViewCell的重用机制

UITableView的每一行都是一个cell,通过dataSource的tableView:cellForRowAtIndexPath方法来初始化每⼀行,当某行出现在用户视野范围内时,初始化这一cell,假如用户在短时间内来回滚动,就会重复创建大量的cell;

为了解决这一问题,UITableViewCell引入了重用机制;

重用机制原理:当滚动列表时,部分UITableViewCell会移出窗口,UITableView会将窗口外的UITableViewCell放入一个对象池中,等待重用。当UITableView要求dataSource返回 UITableViewCell时,dataSource会先查看这个对象池,如果池中有未使用的 UITableViewCell,dataSource则会用新的数据来配置这个UITableViewCell,然后返回给 UITableView,重新显示到窗口中,从而避免创建新对象 。这样可以让创建的cell的数量维持在很低的水平,如果一个窗口中只能显示5个cell,那么cell重用之后,只需要创建6个cell就够了;

cellIdentifier的作用:在我们的用户收藏列表中,cell的格式是多样的,例如,若新闻列表中有图片,我们需要使用一个带图片的cell,若新闻数据中没有图片,那么需要使用一个无图片的cell,为了避免重用过程中,数据配置到错误的cell,我们需要给每种类型的cell定义一个标识符,那么在重用时,就可以通过标识符来找到对应的cell进行重新配置;

     // 先去缓存池中查找是否有满足条件的Cell
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
     
     // 如果缓存池中没有符合条件的cell,就自己创建一个Cell
     if (cell == nil) {
         
         // 创建Cell, 并且设置一个唯一的标记
         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identifier];
         NSLog(@"创建一个新的Cell");
     }
     
     // 给cell设置数据
     NJHero *hero = self.heros[indexPath.row];
     cell.textLabel.text = hero.name;
     cell.detailTextLabel.text = hero.intro;
     cell.imageView.image = [UIImage imageNamed:hero.icon];

3. UITableViewCell高度自适应

self.tableView.rowHeight = UITableViewAutomaticDimension; 
self.tableView.estimatedRowHeight = 80.;

cell内若是放置了textView之类的控件,需要设置其不可滚动;

后续任务

通过本周的学习,我对UITableView这一IOS开发中常用的控件有了更多的了解,学会了自定义一个UITableView,以及它的重用机制的原理,和自适应高度的方式,经过本周的工作,个人部分的页面设计已经完成,下周任务是实现各个页面之间的跳转、返回逻辑;

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!