在滚动UITableViewCell时添加了按钮图像问题

时间:2016-07-15 06:38:33

标签: ios objective-c uitableview

我有UITableViewCell并添加了单元格左侧的按钮,用于选中或取消选中复选标记单元格。 uitableview 50中的行数。

问题:
选择第一行并将复选标记添加到按钮,然后滚动UITableView,我发现另一个复选标记被添加到另一个单元格。 任何人都面临同样的问题,您的意见将得到赞赏。

//用于行IndexPath的单元格

UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:TableCell];

if (cell == nil)
{
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:UITableViewCell owner:self options:nil];
    cell = [nib objectAtIndex:0];
}
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.checkButton.tag = indexPath.row;

//故事板中的图像更改。

-(void)checkButtonAction:(id)sender
{
    if ([sender isSelected]) {

        [sender setSelected:NO];
    }
    else {
        [sender setSelected:YES];
    }
}

2 个答案:

答案 0 :(得分:0)

阅读你的问题,iOS先生正在重复使用它的单元格。下面这一行是罪魁祸首。

UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:TableCell];

这样做是在表视图中查找现有单元格,并加载该单元格。

你说,你点击了一个单元格,它有复选标记,对吧?

好吧,幸运的是当你滚动它时,上面的调用会通过tableview重新使用单元格,并且会在带有复选标记的可见单元格列表中再次看到。

UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:TableCell];

if (cell == nil)
{
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:UITableViewCell owner:self options:nil];
cell = [nib objectAtIndex:0];
}
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.checkButton.tag = indexPath.row;

在上述方法中查看您的来电,您从未将复选标记设置为开启或关闭,先生。您正在重用已具有复选标记的单元格。所以,当你再次看到它时,它也有复选标记,因为你从来没有改变它。

注意:它并非随机提供检查标记。

开始时,不要滚动。给所有细胞提供检查标记,然后你就可以得到答案。现在开始滚动。现在每个单元格都应该有复选标记。

解决方案:

要解决此问题,请在您的datamodel中添加isCheckmarkSelected:Bool属性。 并且,无论何时用户检查单元格,都要将isCheckmarkSelected设为true。

在方法调用中,[cellForRowAtIndexPath] ...读取isCheckmarkSelected值并设置单元格的复选标记。

这将解决不那么随机的复选标记问题。

亲切的问候, Suman Adhikari

答案 1 :(得分:0)

Click Here 以上链接适用于我的问题。 在按钮操作中添加额外代码[[self.tableview] reloadData];