在iOS中的UITableView中获取Checkmark行

时间:2013-05-11 17:59:07

标签: ios uitableview cell

我已经在cellForRowAtIndexPath上以编程方式检查了一些行,它显示并正常工作。但现在我需要获取标记行的检查。我使用以下代码:

for (int i=0; i<10; i++) {

    NSIndexPath *index = [NSIndexPath indexPathForRow:i inSection:0];

    if([motorwayTable cellForRowAtIndexPath:index].accessoryType == UITableViewCellAccessoryCheckmark)
    {
        NSLog(@"Selected Rows: %d",i);
    }
}

这是我的cellForRowAtIndexPath方法:

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

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    //cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}


cell.textLabel.text = [NSString stringWithFormat:@"arefin %d",[indexPath row]];

if(indexPath.row == 8 || indexPath.row == 7 || indexPath.row == 9)
{
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
    cell.selected = YES;
}
else
{
    cell.accessoryType = UITableViewCellAccessoryNone;

}

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

return cell;

}

但问题是我只能看到标记的行,而不是那些尚未显示的行。我如何检查UITableView中尚未显示但在cellForRowAtIndexPath中以编程方式检查的标记行。

提前致谢!

1 个答案:

答案 0 :(得分:4)

您只获得可见行的原因是因为在屏幕外滚动它们时会释放单元格。我推荐覆盖-tableView:didSelectRowAtIndexPath:方法,而不是您当前的解决方案。在此方法中,测试传入方法的索引路径中的单元格是否具有复选标记,如果是,则相应地将索引路径存储在NSMutableSet中。

示例:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        if ([[tableView cellForRowAtIndexPath:indexPath] accessoryType] == UITableViewCellAccessoryCheckmark) {
            [_selectedCellIndexes addObject:indexPath];
        }
}