看板 MacDev 關於我們 聯絡資訊
※ 引述《PurGle (Purple )》之銘言: : ※ 引述《leepair (leepair)》之銘言: : : 大家好 : : 為了節省資源ios有提供table cell重覆利用cell的功能, : : "dequeueReusableCellWithIdentifier", 在開啟這個功能的時候,如果cell里面 : : 用的是內建的label透過IBOutlet作顯示的話比較不會出問題,但如果cell里面包 : : 含了自定的label作內容的顯示時就會出現資料重疊的問題,請問版上大大們有遇 : : 到相同的情況嗎? : : 謝謝。 : 在使用Tabelview的時候,因為它有Reuse的機制。通常在實作繼承UITableviewCell的 : 客制化Cell中,我習慣補上-(void)prepareForReuse這個UITableviewCell提供的Prot : ocol(?),在這個Method中我會將會變動的UI Object清空並指向nil,在Reuse時確保 : Cell是一個初始化的狀態,此應用包括在Lazy loading圖片時,將request做取消並重 : 啟的動作。想像一下不取消request,滑過一千個Cell就會有一千個讀圖的Request產生 : 。 : 用Tag也是一個方法可以達到以上目的,就是要多寫一點Code。 : 有錯請指正。 之前也被這問題卡了一陣子 我的解法是作一個array 放 cell cell內容有變化時,就捨棄重作一個 大致作法 NSArray* cellsArray; - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { if(cellsArray ==nil) [self initCellsArray]; return [cellsArray objectAtIndex:indexPath.row]; } 用 tag 的作法沒嘗試過 有人知道哪種作法比較好嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.45.203.166
yuanruo:我好像從來沒遇過資料重複的問題, 你們是都把賦值寫在 05/23 13:05
yuanruo:if (cell == nil){ } 中? 05/23 13:06
yuanruo:cell == nil 只有一開始初始時顯示螢幕中的cell會進入{ } 05/23 13:07
yuanruo:之後都直接reuse同一Cell你寫在裡面 他要複用時資料就重複 05/23 13:09
yuanruo:用xib拉Cell可以直接解決重複問題 用手敲程式碼addsubview 05/23 13:21
yuanruo:直接在Controller裡寫可以addsubview完就release 或是 05/23 13:22
yuanruo:遍歷cell.contectView.subviews 直接removeFromSuperView 05/23 13:24
yuanruo:或是建立繼承TableViewCell的子類直接寫在layoutSubvies裡 05/23 13:25
Piceman:會用到這作法是因為cell高度可能不一致,這種情況直接reus 05/23 16:28
Piceman:e 的話,會有view 重疊問題 05/23 16:28
Piceman:你的方法我沒看過,晚點研究一下,謝謝 05/23 16:29