UITableViewCell的迴圈利用

2022-08-16 09:57:11 字數 1361 閱讀 4269

uitableviewcell的重複利用機制有效地節省記憶體開銷和提高程式效能。 

tableview擁有乙個快取池,存放未在使用(沒有顯示在介面)的cell。

tableview有一行cell要顯示時先從快取池裡找,沒有則建立,有一行cell隱藏不需要顯示時就放到快取池。

//cellforrow **

-(uitableviewcell *)tableview:(uitableview *)tableview cellforrowatindexpath:(nsindexpath *)indexpathelse

-(void)tableview:(uitableview *)tableview diddeselectrowatindexpath:(nsindexpath *)indexpath

暫時看來確實符合了需求,點選的當前行名稱顏色為紫色,其餘為黑色

但是,當你拖動tableview, 當前行隱藏,隨意拖動,愕然地發現某一行名稱顏色為紫色,再回到原先點選的當前行,名稱顏色卻為黑色而不是紫色。

這也是迴圈利用的問題。接下來解決這個問題。

當一行cell將要顯示時,會呼叫tableview的資料來源方法-tableview:cellforrowatindexpath;

迴圈利用影響影響cell顯示,不會影響原始資料,該方法中進行了資料設定的步驟,利用它介紹兩種解決方案:

1)  迴圈利用不會影響indexpath,indexpaht是唯一的。

首先擁有乙個nsindexpath型別的selectedindexpath屬性,用於紀錄當前選中行,在didselectrowatindexpath方法中進行賦值。 

然後在-(uitableviewcell *)tableview:(uitableview *)tableview cellforrowatindexpath:(nsindexpath *)indexpath方法中,

//設定資料

//取出對應行的資料模型

lsuser *user = self.users[indexpath.row];

//設定使用者名稱

cell.textlabel.text = user.name;

//根據是否是選中行設定名稱顏色

if(self.selectedindexpath == indexpath)else{

cell.textlabel.textcolor

= [uicolor blackcolor];

2)  對資料動手,從資料模型中派生乙個專對於該cell的資料模型,追加相應的屬性,然後在相應的地方對資料進行處理和設定。這裡不再贅述,該方案適合處理複雜的情況,比如如不一定是選中與非選擇兩種狀態,還可能是三種以上狀態,或者cell的動畫效果,或者需要[tableview reloaddata]等的情況。

計算UITableViewCell高度

uitableview是先執行 cgfloat tableview uitableview tableview heightforrowatindexpath nsindexpath indexpath函式計算整個uitableview內容高度,然後才執行 uitableviewcell table...

UITableViewCell重用問題

在寫sina 微博介面的過程中使用到了cell,那麼就是在cell上新增一些控制項,但是由於每條微博的內容都是不同的,所以在顯示的過程中,出現了內容重疊的問題,其實就是uitableviewcell重用機制的問題。cpp view plain copy uitableviewcell tablevi...

UITableViewCell重用機制

uitableview是ios開發中使用頻率非常高的乙個控制項,它常被用來展示資訊列表,儘管資訊資料可能非常多,但uitableview消耗的資源卻並不會隨著展示資訊的增多而變大,這都要得益於uitableviewcell的重用機制,重用機制 顧名思義,就是反覆利用資源的機制。以下通過一些 來看下通...