2017-01-03 44 views
-2

我有一個tableView三節。最初有一個細胞內容重複的問題。UITableviewcell重複內容[IOS]

這是通過將單元的重用標識符設置爲nil來解決的。之後,在第3部分的第一個單元格的位置出現黑色條紋/顏色,如this屏幕截圖。

This是我以前issue.And改變細胞實施,

static NSString *cellIdentifier=[NSString stringWithFormat:@"Cell%ld%ld",(long)indexPath.section,(long)indexPath.row]; 

UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier];; 

if(cell==nil){ 

    cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; 


} 

有誰知道是什麼原因呢?任何幫助讚賞。

+1

添加一些代碼和截圖 – iOS

+2

不要重用標識設置爲'nil'。這是非常糟糕的代碼。爲您找到最初的問題的另一個解決方案或在這裏提出一個問題。 – dasdom

+0

請向我們展示'tableView'的實現! – dirtydanee

回答

0

起初,單元格內容重複的最可能原因是單元格的子視圖不會重複使用,而是每次配置單元格並將其添加到視圖層次結構中時創建。舊的子視圖不會被刪除,因此重複的內容。

要修復它,創建單元初始化階段所需的所有子視圖。在單元配置過程中,只更新含有內容的視圖,更改它們的大小,但不要創建新視圖或刪除舊視圖。通過重寫和實施prepareForReuse()PrepareForReuse method description

最後,複用標識符設置到nil

復位細胞爲默認外觀是不好的實踐,並可能導致未定義的行爲(在屏幕截圖如圖所示)。單元的重用標識符在其初始化期間設置,不應在單元生命週期中更改。

+0

單元的重用標識符在初始化期間未設置。單元格與標識符無關,'tableView'是使用id的那個。但是,將重用標識符設置爲「nil」是不好的做法,但不是因爲它會導致意外的行爲,我們知道準確地發生了什麼。 'tableView'不會重用單元格,它會在每次顯示單元格時創建一個新的'UITableViewCell'實例。如果你有大量的單元格,這可能會導致性能問題,例如在tableView中滾動會超慢。 – dirtydanee

+0

@richard topchiy抱歉它沒有爲我工作。你可以分享代碼嗎? –

+0

@dirtydanee,我在這裏附加的鏈接是對UITableViewCell指定初始化程序的描述。它需要重用標識符或零。據我所知,在單元格創建後沒有辦法改變重用標識符,因此重用標識符必須在初始化階段提供。 https://developer.apple.com/reference/uikit/uitableviewcell/1623276-init –

0

看看你的代碼,好像你正在爲每個單元格創建一個新的標識符。

[NSString stringWithFormat:@"Cell%ld%ld",(long)indexPath.section,(long)indexPath.row] 

這條線將創建一個新的標識符的每一行,如Cell00Cell01等。

然而,它不應該是動態的,它應該是,像可變的前綴表明,static

static NSString *cellIdentifier= @"Cell"; // or whatever is it in IB or registered by 
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier];; 

if(cell==nil) { 
    cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; 
} 

此外,當您忘記實施prepareForReuse()時,可能會發生重複。這是一個函數,當你的單元被重用時,操作系統會調用這個函數。您可以將所有值設置爲nil,這樣可以避免重複。

例:

- (void)prepareForReuse { 
    [super prepareForReuse]; 
    // Then Reset here back to default values that you want. 
    self.titleLabel.text = nil; 
    self.imageView.image = nil; 
} 
+0

我試過了。黑色被刪除。再次出現以前的問題。請參見截圖2 –

+0

屏幕截圖2上的問題是什麼? – dirtydanee

+0

第2節中的內容重複。第2節中的內容是UIView,它在滾動時也出現在另一個單元格中。 –