大家好,我知道这是一个经常出现的问题,但请帮助我。我有一个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;
}
}
答案 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];
}