如何使用UITableViewCellAccessoryCheckmark检查uitableview中的多行

时间:2011-05-23 10:27:31

标签: objective-c uitableview

大家好,我知道这是一个经常出现的问题,但请帮助我。我有一个tableview,其中我显示来自NSArray的数据。我想用UITableViewCellAccessoryCheckmark选择多行。但当我滚动复选标记消失。大家都在谈论可重复使用的细胞。我理解这个概念,但无法解决我的问题。那么请有人能给我执行cellForRowAtIndexPath和didSelectRowAtIndexPath方法谢谢。这很紧急。我使用这段代码

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{
    UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"]; 

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"cell"];

    }


    cell.textLabel.text = [listData objectAtIndex:indexPath.row];


    [cell setAccessoryType:UITableViewCellAccessoryNone];
    for (int i = 0; i < selectedIndexes.count; i++) {
        NSUInteger num = [[selectedIndexes objectAtIndex:i] intValue];

        if (num == indexPath.row) {
            [cell setAccessoryType:UITableViewCellAccessoryCheckmark];
            // Once we find a match there is no point continuing the loop
            break;
        }
    }

1 个答案:

答案 0 :(得分:2)

如果我正确理解了您的问题,那么只要选择了行,就会有一个数组并将索引添加到数组中。那不行。 我建议你有一本字典来映射选定的行,

NSMutableDictionary *selectedIndexDict;

didSelectRowAtIndexPath:方法中,

[selectedIndexDict setValue:[NSNumber numberWithBool:YES] forKey:[NSString stringWithFormat:@"%d", indexPath.row]];

并且,在您的cellForRowAtIndexPath:方法中,

[cell setAccessoryType:UITableViewCellAccessoryNone];

if ([[selectedIndexDict valueForKey:[NSString stringWithFormat:@"%d", indexPath.row]] boolValue]) {

    [cell setAccessoryType:UITableViewCellAccessoryCheckmark];
}