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的重用機制,重用機制 顧名思義,就是反覆利用資源的機制。以下通過一些 來看下通...