iOS 中UITableView的深理解

例以下圖:首先分析一下需求:1.根據模型的不一樣狀態顯示不一樣高度的cell,和cell的UI界面。spa

2.點擊cell的取消按鈕時,對應的cell首先要把取消按鈕隱藏掉,而後改變cell的高度。代理

 

根據需求先解決第一個需求,須要兩步對象

當模型數據的屬性的status =@"2",不顯示取消按鈕;status = @"1",顯示取消按鈕。blog

1.須要注意的是cell的重用在這裏面互有一些影響,因此在自定義cell的模型的setter方法中,io

在cell.m文件中寫上模型setter方法的僞代碼:table

if(status == 1){
  // cell中添加對應的UIButton  
}else if(status == 2) {
  // 若是上一步建立在cell中的建立的按鈕存在,那麼移除對應的按鈕。也就是置爲nil,不然會出現重用  
}

2.在控制器中計算cell高度對應代理的方法中class

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    
// 對應的模型顯示對應的高度,因此首先須要獲得對應的模型,獲取模型能夠根據cell裏的屬性模型得到,即經過自定義cell的對象方法,得到cell中模型的屬性。
獲得對應的屬性後,根據對應的模型中屬性的狀態顯示對應的高度。 // 這裏須要知道獲取cell,不只是經過tableView對應的indexPath得到的,還能夠經過自定義的cell的對象方法得到cell。 return ; }

 經過以上兩步就能夠解決第一個需求。model

第二個需求:點擊cell的取消按鈕時,對應的cell首先要把取消按鈕隱藏掉,而後改變cell的高度。方法

 

監聽cell中按鈕的方法有兩種方法:第必定義button的tag值,在控制器中獲取,而後監聽方法,或者把button的屬性寫在cell.h中在cell的數據源代理中獲得cell.btn 而後監聽方法。im

第二種方法是,在cell中建立代理方法,當點擊cell中的button在cell中監聽button被點擊的方法,而後相應對應的代理,能夠傳參,如cell 和 對應model。

因此這裏就用到了這一種方法。點擊的時候把對應行cell的model傳過去,而後改變model中的屬性的狀態,reload對應行的cell便可。

相關文章
相關標籤/搜索