0

我有一个列表,我将其用作复选框。我已启用或禁用选中行上的复选标记。但是当我滚动列表时,每 10 行之后它的 make mark 行。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *oldCell = [tableView cellForRowAtIndexPath:indexPath];
    if (oldCell.accessoryType == UITableViewCellAccessoryCheckmark)
    {
        oldCell.accessoryType = UITableViewCellAccessoryNone;
    }
    else
    {
        oldCell.accessoryType = UITableViewCellAccessoryCheckmark;
    }
}
4

4 回答 4

0

这是因为UITableView重用了单元格。因此,在方法cellForRowAtIndexPath中,您必须检查(特定部分和行的)特定单元格,如果需要检查,请提供附件类型。

如果该单元不需要,请将附件类型提供为无。

于 2013-01-29T07:19:40.207 回答
0

UItableView在每个滚动中重复使用单元格,因此根据附件类型使用条件不是一个好习惯。您可以使用选定的项目创建一个NSMutableArray并根据以下条件进行检查。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    }
    if ([selected containsIndex:indexPath.row]) {
        [cell setAccessoryType:UITableViewCellAccessoryCheckmark];
    } else {
        [cell setAccessoryType:UITableViewCellAccessoryNone];
    }
    // Do the rest of your code
    return cell;
} 

didSelectrowAtindexpath方法中,您可以添加和删除所选项目。

于 2013-01-29T07:21:48.337 回答
0

您需要将逻辑设置为单元格 in 的附件类型 cellForRowAtIndexPath,并使用复选标记标识要标记的单元格,您可以在列表中标记对象didSelectRowAtIndexPath:或在此处管理列表的选定/未选定对象数组。

于 2013-01-29T07:26:10.717 回答
0
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];

    if ([selectedCell accessoryType] == UITableViewCellAccessoryNone) {

        [selectedCell setAccessoryType:UITableViewCellAccessoryCheckmark];

        [NSMutableArray addObject:[AnotherMutableArray objectAtIndex:indexPath.row]];

    } else {

        [selectedCell setAccessoryType:UITableViewCellAccessoryNone];

       [NSMutableArray removeObject:[AnotherMutableArray objectAtIndex:indexPath.row]];

    }
    [tableView deselectRowAtIndexPath:indexPath animated:NO];
}

同样在您的 viewDidLoad 中,实例化两个可变数组-

yourmutableArray1 = [[NSMutableArray alloc]init];
yourmutableArray2 = [[NSMutableArray alloc]init];
于 2013-01-29T07:33:56.017 回答