我没有编辑的UITableViewCell(不可见的部分)也被编辑。

时间:2014-11-11 08:42:24

标签: ios objective-c uitableview

当我在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;
}

2 个答案:

答案 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;