• 【iOS系列】-UITableViewCell的展开与收缩的实现思路


    UITableViewCell的展开与收缩的实现思路


    现在项目中很多地方都会用到,所以我这里介绍一种可以复用的思路,这与文章后面的Swift的实现思路不同,具体大家可自行对比。

    Demo项目地址

    开始

    先说一下UITableView的两个代理:cellForRowAtIndexPathheightForRowAtIndexPath

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

    我们要实现UITableView的展开与收缩就需要在每次点击收缩/展开按钮的时候执行heightForRowAtIndexPath方法,让返回的高度值不同,这样我们就可以显示不同高度的cell,同时要能修改数据源cellForRowAtIndexPath,让UITableView显示最新的数据

    我这里做的是,只对这个heightForRowAtIndexPath进行修改,每次修改的时候,我就计算计算里面Label(目前假定cell中只显示文字)frame,而对cell的内容不进行修改。修改label的高度后,label中得文字被遮盖。也可以实现目前的效果

    但是由于UITableView的cellForRowAtIndexPath执行在heightForRowAtIndexPath后面,也就是我们只有在heightForRowAtIndexPath现行计算高度后,才会执行cellForRowAtIndexPath显示cell的内容,所以为了防止重复计算,我们这里除了正常用到的model类外,再声明一个frameModel类,里面放:

    • 正常的Model
    • cell中子控件的frame
    • cell的高度

    这样我们就可以用frameModel来替换常规的model,在拿到frameModel后就可以计算出cell的高度,同时包括cell的子控件的frame,这样当我们点击收缩/展开按钮的时候,就可以实现修改frameModel就可以实现cell的展开与收缩效果了。


    Swift语言也有相关的实现,不过用的是AutoLayout,大家也可以参考

    Swift的实现思路介绍

    Swift的实现


    这里重复一下,这篇文章中Demo项目的下载,请点击


    作者:Darren

    微博:@IT_攻城师

    github:@Darren90

    博客:http://www.cnblogs.com/fengtengfei/

    欢迎您的访问...


  • 相关阅读:
    php_l3arning_notes_3
    php_l3arning_notes_2
    php_l3arning_notes_1
    从 HTTP 到 HTTPS 再到 HSTS
    WSGI&ASGI
    WSGI 介绍
    什么是multipart/form-data请求
    SSH 端口转发
    Redis与RabbitMQ作为消息队列的比较
    数据库索引,到底是什么做的?
  • 原文地址:https://www.cnblogs.com/fengtengfei/p/5084222.html
Copyright © 2020-2023  润新知