UITableViewCell中cell重用機制導致內容重復的方法

   UITableView繼承自UIScrollview,是蘋果為我們封裝好的一個基于scroll的控件。上面主要是一個個的UITableViewCell,可以讓UITableViewCell響應一些點擊事件,也可以在UITableViewCell中加入UITextField或者UITextView等子視圖,使得可以在cell上進行文字編輯。

   UITableView中的cell可以有很多,一般會通過重用cell來達到節省內存的目的:通過為每個cell指定一個重用標識符(reuseIdentifier),即指定了單元格的種類,當cell滾出屏幕時,會將滾出屏幕的單元格放入重用的queue中,當某個未在屏幕上的單元格要顯示的時候,就從這個queue中取出單元格進行重用。

   但對于多變的自定義cell,有時這種重用機制會出錯。比如,當一個cell含有一個UITextField的子類并被放在重用queue中以待重用,這時如果一個未包含任何子視圖的cell要顯示在屏幕上,就會取出并使用這個重用的cell顯示在無任何子視圖的cell中,這時候就會出錯。

   解決方法:

方法一:

  將獲得cell的方法從- (UITableViewCell*)dequeueReusableCellWithIdentifier:(NSString*)identifier 換為-(UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath

  重用機制調用的就是dequeueReusableCellWithIdentifier這個方法,方法的意思就是“出列可重用的cell”,因而只要將它換為cellForRowAtIndexPath(只從要更新的cell的那一行取出cell),就可以不使用重用機制,因而問題就可以得到解決,雖然可能會浪費一些空間。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{static NSString *CellIdentifier = @"Cell";// UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];//改為以下的方法//根據indexPath準確地取出一行,而不是從cell重用隊列中取出UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];if (cell == nil) {cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];}//...其他代碼
}

方法二:?通過為每個cell指定不同的重用標識符(reuseIdentifier)來解決

  重用機制是根據相同的標識符來重用cell的,標識符不同的cell不能彼此重用。于是我們將每個cell的標識符都設置為不同,就可以避免不同cell重用的問題了。

  

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{//以indexPath來唯一確定cellNSString *CellIdentifier = [NSString stringWithFormat:@"Cell%d%d", [indexPath section], [indexPath row]];//出列可重用的cellUITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];if (cell == nil) {cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];}//...其他代碼
}

方法三: 刪除重用cell的所有子視圖

  這個方法是通過刪除重用的cell的所有子視圖,從而得到一個沒有特殊格式的cell,供其他cell重用。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{static NSString *CellIdentifier = @"Cell";//出列可重用的cellUITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];if (cell == nil) {cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];}else{//刪除cell的所有子視圖while ([cell.contentView.subviews lastObject] != nil){[(UIView*)[cell.contentView.subviews lastObject] removeFromSuperview];}}//...其他代碼
}

方法三我試著好像有些問題,具體怎么弄正在研究,

轉載于:https://www.cnblogs.com/anyezhuixing/p/4206392.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/257805.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257805.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257805.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

高級會計師計算機考試中級,會計師需要計算機等級考試嗎

塵伴考證達人06-19TA獲得超過671個贊[color#000][font宋體][size3][alignleft]廣東省高級會計師評審職稱外語,執行《關于調整完善我省職稱外語政策的通知》(粵人發〔2018〕120號)[/align][alignleft]三、報考職稱外語考試的等級要求[b][size3](一)申報高教、科研、衛…

一 手游開發工具cocos2d-x editor初識

可學習的demo: 7個實戰項目 flappybird(飛揚小鳥)、popstar(消滅星星)、fruitninja(水果忍者)、2048(數度消除)。 moonwarriors(月亮戰神)、frui…

Provisioning Services 7.6 入門到精通系列之七:創建虛擬磁盤

在上一章節完成了主目標設備的準備,今天將揭曉如何通過映像向導創建虛擬磁盤。1.1 點擊開始菜單”映像向導”1.2 在映像向導點擊”下一步“1.3 輸入PVS服務器信息,下一步1.4 點擊”新建虛擬磁盤”1.5 輸入新虛擬磁盤的相關信息,下一步1.6 配置…

在使用多表的查詢顯示的時候 建議使用視圖

如果沒有查詢只是需要第一次顯示的話用linq表達式就可以了,如果還涉及到查詢的話,linq表達式就很麻煩了,我還不會。所以我們用視圖做查詢就方便很多了。轉載于:https://www.cnblogs.com/woshijishu3/p/4207567.html

大型網站技術架構03

永無止境:網站的伸縮性架構 1. 所謂網站的伸縮性是指不需要改變網站的軟硬件設計,僅僅通過改變部署的服務器數量就可以擴大或者縮小網站的服務能力。 2. 網站架構的伸縮性設計: 1). 不同功能進行物理分離實現伸縮性:通過增加服務器…

全國職業院校技能大賽軟件測試題目,我校喜獲2018全國職業院校技能大賽“軟件測試”賽項一等獎...

九江職院新聞網訊(信息工程學院)5月31日,從2018全國職業院校技能大賽傳來喜訊,由我校信息工程學院教師艾迪、朱虎平指導,學生郭星宏、賴閩、吳宗霖組成的競賽團隊,代表江西省在高職組“軟件測試”賽項中榮獲團體一等獎的佳績。為積…

兩個數組a[N],b[N],其中A[N]的各個元素值已知,現給b[i]賦值,b[i] = a[0]*a[1]*a[2]…*a[N-1]/a[i];...

轉自:http://blog.csdn.net/shandianling/article/details/8785269 問題描述:兩個數組a[N],b[N],其中A[N]的各個元素值已知,現給b[i]賦值,b[i] a[0]*a[1]*a[2]…*a[N-1]/a[i]; 要求&#xff1a…

protobuf---messge嵌套get set

package test_namespace;message ChildMsg {optional string child 1; }message FatherMsg {optional string father 1; optional ChildMsg child_msg 2; } 或者 message FatherMsg {optional string father 1; message ChildMsg {optional string child 1;}optiona…

南方科技大學計算機交換生,國際合作 – 合作交流分類 – 南方科技大學生物醫學工程系...

2019年秋季學期本科生赴麻省理工交流學習項目申請須知本項目是根據南方科技大學與麻省理工簽訂的合作協議,約定我校每年將選派不超過6名學生前往麻省理工學院進行為期一年的交流學習,學生僅可在機械工程系內選擇課程。本批次將選拔優秀本科生于2019-2010…

利用VOIP電話通信服務,他騙得18億美元

VoIP電話服務公司TelexFree的CEO詹姆斯梅里爾承認他的公司是一個不折不扣的,擁有18億美元金字塔式的旁氏騙局公司。 沒想到VOIP技術也能成為詐騙犯罪的“工具” 本周一,在美國馬薩諸塞州的一個地方法院,詹姆斯梅里爾被認定有罪。并具有九項罪…

無鎖的環形隊列

#ifndef _RingQueue_H_ #define _RingQueue_H_ #include <memory.h> template<class T, unsigned int MAX_LEN 1024> class RingQueue { public://-----------------------------------------------------// 構造//---------------------------------------------…

三相濾波器怎么接線_單相電機和三相電機怎么接線?為什么三相電機有3或6個接線柱?...

于電機接線柱的鏈接方法&#xff0c;下面整理了從單相和三相的接法及三個接線柱和六個接線柱的區別等知識&#xff0c;跟各位電工朋友分享&#xff0c;希望在實際操作中能幫到各位。單相電機一般是指用單相交流電源(AC220V)供電的小功率單相異步電動機。這種電機通常在定子上有…

天文望遠鏡(四)

買天文望遠鏡有段日子了&#xff0c;除了第一天到貨時帶著兒子體驗了一回&#xff0c;后來由于接連霧霾&#xff0c;基本成了裝飾。 兒子在這期間也提出要用望遠鏡&#xff0c;但都沒有找到合適的機會&#xff0c;說到底還是有些主觀原因。 昨天周末空氣質量不錯&#xff0c;站…

360計算機報名支付不了,為什么我的電腦使用360瀏覽器后無法登陸網...

2018-07-25 15:59龔崇松 客戶經理若您在密碼、驗證碼輸入框遇到紅色的小叉子等&#xff0c;則說明您的瀏覽器未成功下載我行的ActiveX安全控件&#xff0c;請您進行以下操作&#xff1a; (1)登錄工行門戶網站&#xff1b;(2)點擊“個人網上銀行登錄”下方的“安裝”。進入下一個…

Android源碼編譯全過程記錄(基于最新安卓5.1.0)【轉】

本文轉載自&#xff1a;http://blog.csdn.net/drg1612/article/details/44802533 我的編譯條件&#xff1a; 1 Ubuntu Kylin 14.04 長期支持版 下載地址 &#xff1a; http://www.ubuntu-china.cn/download 2 我的電腦是聯想G470 i3處理器 內存4G&#xff0c;120g固體硬盤&…

第三方登錄接入-qq,weibo-java

開發之前 需求&#xff1a;網站接入qq,sina微博登錄&#xff0c;本文最后付效果圖&#xff1a; 說明&#xff1a;大部分網站本身是需要用戶概念的&#xff0c;很多操作依附于用戶&#xff0c;而qq或微博作為一種登錄方式指向用戶而已&#xff0c;我參考了一下其他網站的做法&am…

python替換img的路徑為新的路徑_以“五智”為核心 南寧電信打造5G時代數字家庭新路徑...

來源&#xff1a;通信信息報本報訊(特約記者 許輝堅)近日&#xff0c;中國電信廣西南寧分公司在協助廣西自治區通信管理局主辦的“電信用戶委員會體驗活動”中&#xff0c;以發揮用戶委員會的平臺和紐帶作用&#xff0c;促進持續改善電信服務質量為主題&#xff0c;以“五智”能…

0118——RTLabel和正則表達式

RTLabel和RegexKitLite都要導入第三方庫 使用Regexkitlite庫進行正則表達式的解析 1.庫是使用MRR&#xff0c;如果在ARC工程里面使用這個類&#xff0c;必須在project->build phases->compile resources里面將regexKitLite.m的編譯指令設為&#xff1a;-fno-objc-arc 2.需…

熱帶雨林繪畫軟件測試,兒童畫教程|色彩練習與思維創想——好熱鬧的熱帶雨林!...

課程類型綜合創意繪畫課程參考課時90分鐘工具材料勾線筆、水彩筆、卡紙課程構思小朋友們知道嗎&#xff1f;熱帶雨林是地球上抵抗力和穩定性最高的生態系統&#xff0c;常年氣候非常的炎熱&#xff0c;雨量充沛&#xff0c;沒有明顯的季節差異&#xff0c;生物群落演替速度極快…

對于一個IE8兼容性問題的反思

近期做了一個需求&#xff0c;功能非常easy&#xff0c;把用戶的優惠券數量讀取出來&#xff0c;然后顯示到“用戶中心”上。開發完畢后。別的瀏覽器正常。可是到IE8上就不行了。并且&#xff0c;按下F12之后&#xff0c;就又能夠載入出來了。首先&#xff0c;找了前端人員&…