2016-09-26 52 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'内重用单元格。当用户上下滚动重复使用实例时,位置就会丢失。当用户点击一个单元格时,添加这个额外的代码在屏幕滚动时根本没有任何效果 –