我已经尝试了此网站上针对此问题提供的每个可用选项,但没有一个似乎可以正常工作。 如果向下滚动,我会看到复选标记。如果我向后滚动,我的选择的定位是不一样的。
所以问题是一样的,我想再次打开这个问题作为一个新的开始。下面是我如何做它:在单元格上重复的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是字符串数组的类型? –