我有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];
}
}
答案 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];