我已经在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中以编程方式检查的标记行。
提前致谢!
答案 0 :(得分:4)
您只获得可见行的原因是因为在屏幕外滚动它们时会释放单元格。我推荐覆盖-tableView:didSelectRowAtIndexPath:
方法,而不是您当前的解决方案。在此方法中,测试传入方法的索引路径中的单元格是否具有复选标记,如果是,则相应地将索引路径存储在NSMutableSet
中。
示例:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([[tableView cellForRowAtIndexPath:indexPath] accessoryType] == UITableViewCellAccessoryCheckmark) {
[_selectedCellIndexes addObject:indexPath];
}
}