2016-09-26 36 views
0

我已經嘗試了此網站上針對此問題提供的每個可用選項,但沒有一個似乎可以正常工作。 如果向下滾動,我會看到複選標記。如果我向後滾動,我的選擇的定位是不一樣的。
所以問題是一樣的,我想再次打開這個問題作爲一個新的開始。下面是我如何做它:在單元格上重複的UITableViewCellAccessoryCheckmark

​​

我也試了一下,在一個單一的didSelectRowAtIndexPath方法的方法,但結果是一樣的。

+0

allCodeLabel是字符串數組的類型? –

回答

2

添加條件cellForRowAtIndexPath

if([selectedDX containsObject:allCodeLabel[indexPath.row]]) 
    { 
     cell.accessoryType = UITableViewCellAccessoryType.Checkmark 
    } 
    else 
    { 
     cell.accessoryType = UITableViewCellAccessoryType.None 
    } 

它的工作原理對我來說,希望它有幫助:)

+0

@SimonMcLoughlin如果您使用我的問題中的代碼,並且在didSelectRowAtIndexPath中實現了這一點。它完美的作品。所有三個答案都是正確的。 –

+0

我知道這是單元重用問題,但對於大型數組而不是使用不同的單元標識符並影響內存,這似乎更容易。 – sanman

+0

@TalhaCh道歉我錯誤閱讀這個答案,我認爲它是一樣的,下面。這是對的。其他答案之一,只提示'didSelectRowAtIndexPath'內的代碼是不正確的 –

3

當您返回cellForRowAtIndexPath中的單元格時,您是否正確設置了附件類型?在我看來,只有當用戶點擊一個單元時才設置附件,但這還不夠。

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    [...] 

    if ([selectedDX containsObject:myMutArray[indexPath.row]]) 
    { 
     cell.accessoryType = UITableViewCellAccessoryCheckmark; 
    } 
    else 
    { 
     cell.accessoryType = UITableViewCellAccessoryNone; 
    } 

    [...] 
} 

當您在表格視圖中滾動時,將重用您的單元格。所以一個單元格可以重複用於多個項目。這意味着附件也被重複使用。因此,當您滾動並且不從電池中取出附件時,它仍然會有複選標記。

你也可以重新在prepareForReuse方法附件在自定義UITableViewCell

+0

我明白,這似乎是正確的做法。你可以在代碼中顯示 –

1

你能應付這樣的:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    WCategoriesTableViewCell* cell = [tableView 
           cellForRowAtIndexPath:indexPath]; 

    if (cell.accessoryType == UITableViewCellAccessoryNone) 
    cell.accessoryType = UITableViewCellAccessoryCheckmark; 
    else 
    cell.accessoryType = UITableViewCellAccessoryNone; 
} 
+1

這不會解決問題,這個問題是關於單元重用。通過'didSelectRowAtIndexPath'設置它是不夠的 –

+0

@SimonMcLoughlin它可以和足夠的兄弟:) – Mohamad

+0

它不是,這個問題是由於cellForRowAtIndexPath'內重用單元格。當用戶上下滾動重複使用實例時,位置就會丟失。當用戶點擊一個單元格時,添加這個額外的代碼在屏幕滾動時根本沒有任何效果 –