【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/

歡迎您的訪問...



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM