当我在UITableViewCell上放置一个复选标记时,我也没有选中复选标记(不可见)的单元格。
我认为当tableview重复使用cell时,有些事情是错误的
我该如何解决?
- (void)viewDidLoad
{
myTableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 100, 200, 300)];
[myTableView registerClass:[AreaCellInShakeVC class] forCellReuseIdentifier:@"areaCell"];
myTableView.delegate = self;
myTableView.dataSource = self;
myTableView.allowsMultipleSelection = YES;
[self.view addSubview:myTableView];
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString* cellIdentifier = @"Cell";
CustomCell* cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {
cell = [[CustomCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
CustomCell* cell = (CustomCell *)[tableView cellForRowAtIndexPath:indexPath];
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
答案 0 :(得分:1)
您需要在cellForForIndexPath中设置一些逻辑,以相应地设置复选标记。这也意味着您需要将单元格的状态存储在某处,以便检查是否勾选了该单元格。因此,设置一个数组,每行有一个条目,然后使用indexpath.row值检查它是否应该检查它。例如在cellForRowAtIndexPath中就有这样的东西
if ([[selectedRow objectAtIndex:indexPath.row] isEqualToString:@"Y"])
{
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else
{
cell.accessoryType = UITableViewCellAccessoryNone;
}
在didSelectRowAtIndexPath中,您可以通过
相应地设置检查if ([[selectedRow objectAtIndex:indexPath.row] isEqualToString:@"Y"])
{
[selectedRow replaceObjectAtIndex:indexPath.row withObject:@"N"];
}
else
{
[selectedRow replaceObjectAtIndex:indexPath.row withObject:@"Y"];
}
然后在tableView上执行reloadData以更新checkMark。希望这会有所帮助。
答案 1 :(得分:0)
在cellForRowAtIndexPath中设置复选标记,如
cell.accessoryType = UITableViewCellAccessoryNone;