我有一个tableview
,包含很多行,大约有60行,我希望用户能够check
或uncheck
的行数为UITableViewCellAccessoryCheckmark
。他要。问题是,当我检查某个cell
时,该位置的所有其他单元格也将被检查。例如,如果我检查第5行,行号15,25,35等等也将获得UITableViewCellAccessoryCheckmark
,我不希望这种情况发生。我需要检查的行只是用户真正选择的行。这是我的didSelectRowAtIndexPath
方法
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
Materia *current = [Manejador MateriasEnListaAtIndex:indexPath.row ];
if(cell.accessoryType == UITableViewCellAccessoryCheckmark){
cell.accessoryType = UITableViewCellAccessoryNone;
[ManejadorVistas EliminarMateria:current];
}
else{
cell.accessoryType = UITableViewCellAccessoryCheckmark;
[ManejadorVistas AgregarMateria:current];
}
}
答案 0 :(得分:1)
将dequeueReusableCellWithIdentifier
设置为nil
,如下所示,然后尝试使用它......
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:nil];
也会在这种情况下编写你的代码..
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:nil] autorelease];
// write your code here....
}
答案 1 :(得分:1)
在你的cellForRowAtIndexPath
中UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"cell"];
// write your code here....
}
Materia *current = [Manejador MateriasEnListaAtIndex:indexPath.row ];
//While reusing we have to check whether ManejadorVistas contains the object.
//Because you would have added it inside didSelect Delegate
if([ManejadorVistas containsObject:current])
{
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else
{
cell.accessoryType = UITableViewCellAccessoryNone;
}