我已經嘗試了此網站上針對此問題提供的每個可用選項,但沒有一個似乎可以正常工作。 如果向下滾動,我會看到複選標記。如果我向後滾動,我的選擇的定位是不一樣的。
所以問題是一樣的,我想再次打開這個問題作爲一個新的開始。下面是我如何做它:在單元格上重複的UITableViewCellAccessoryCheckmark
我也試了一下,在一個單一的didSelectRowAtIndexPath方法的方法,但結果是一樣的。
我已經嘗試了此網站上針對此問題提供的每個可用選項,但沒有一個似乎可以正常工作。 如果向下滾動,我會看到複選標記。如果我向後滾動,我的選擇的定位是不一樣的。
所以問題是一樣的,我想再次打開這個問題作爲一個新的開始。下面是我如何做它:在單元格上重複的UITableViewCellAccessoryCheckmark
我也試了一下,在一個單一的didSelectRowAtIndexPath方法的方法,但結果是一樣的。
添加條件cellForRowAtIndexPath
if([selectedDX containsObject:allCodeLabel[indexPath.row]])
{
cell.accessoryType = UITableViewCellAccessoryType.Checkmark
}
else
{
cell.accessoryType = UITableViewCellAccessoryType.None
}
它的工作原理對我來說,希望它有幫助:)
@SimonMcLoughlin如果您使用我的問題中的代碼,並且在didSelectRowAtIndexPath中實現了這一點。它完美的作品。所有三個答案都是正確的。 –
我知道這是單元重用問題,但對於大型數組而不是使用不同的單元標識符並影響內存,這似乎更容易。 – sanman
@TalhaCh道歉我錯誤閱讀這個答案,我認爲它是一樣的,下面。這是對的。其他答案之一,只提示'didSelectRowAtIndexPath'內的代碼是不正確的 –
當您返回cellForRowAtIndexPath
中的單元格時,您是否正確設置了附件類型?在我看來,只有當用戶點擊一個單元時才設置附件,但這還不夠。
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
[...]
if ([selectedDX containsObject:myMutArray[indexPath.row]])
{
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else
{
cell.accessoryType = UITableViewCellAccessoryNone;
}
[...]
}
當您在表格視圖中滾動時,將重用您的單元格。所以一個單元格可以重複用於多個項目。這意味着附件也被重複使用。因此,當您滾動並且不從電池中取出附件時,它仍然會有複選標記。
你也可以重新在prepareForReuse
方法附件在自定義UITableViewCell
子
我明白,這似乎是正確的做法。你可以在代碼中顯示 –
你能應付這樣的:
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
WCategoriesTableViewCell* cell = [tableView
cellForRowAtIndexPath:indexPath];
if (cell.accessoryType == UITableViewCellAccessoryNone)
cell.accessoryType = UITableViewCellAccessoryCheckmark;
else
cell.accessoryType = UITableViewCellAccessoryNone;
}
這不會解決問題,這個問題是關於單元重用。通過'didSelectRowAtIndexPath'設置它是不夠的 –
@SimonMcLoughlin它可以和足夠的兄弟:) – Mohamad
它不是,這個問題是由於cellForRowAtIndexPath'內重用單元格。當用戶上下滾動重複使用實例時,位置就會丟失。當用戶點擊一個單元格時,添加這個額外的代碼在屏幕滾動時根本沒有任何效果 –
allCodeLabel是字符串數組的類型? –