-1

我正在尝试设置我的 UITableView 以在用户执行我正在侦听的操作时打勾。我可以显示复选标记,但它们显示在多个位置。

现在我的 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] autorelease];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}

if(myCheckmarks[indexPath.row] == [NSNumber numberWithInt:1])
    cell.accessoryType = UITableViewCellAccessoryCheckmark;

cell.textLabel.text = [benchmarkArray objectAtIndex:indexPath.row];
return cell;
}

我正在使用它来设置它正在读取的数组:

[myCheckmarks replaceObjectAtIndex:tempIndex withObject:[NSNumber numberWithInt:1]];

虽然在这个实现中,复选标记甚至在表格移动之前都不会出现,但这在某种程度上是意料之中的。

这是我的旧代码,它会立即设置复选标记,但我仍然有整个“滚动时有多个复选标记”的问题:

        UITableViewCell *cell = [metricTableView cellForRowAtIndexPath:selectedCellIndexPath];
        cell.accessoryType = UITableViewCellAccessoryNone;
        cell = nil;
        NSLog(@"1 else hit");

那是用户点击一个按钮的时候,它会立即更新,因为那时调用了代码。如果桌子被移动,它仍然会在整个地方都有复选标记。

如何设置它以便我可以在长度为 11-27 个元素但一次只显示十个元素的表格上使用附件复选标记(出于 UI 设计原因)?

编辑:我需要在我的 cellForRowAtIndexPath 中添加它,文本永远不会重复。它正在读取一个包含 11-27 个项目的数组,并且每次都正确显示每个单元格,但是当我尝试使用 UITableViewCellAccessoryCheckMark 时,当我滚动 UITableView 时,它会显示在多个位置。

4

1 回答 1

1

如果“多个位置的复选标记”是指不应该有它们的单个单元格上的复选标记,我怀疑它使用的是一个出队的单元格,其附件类型设置为 UITableViewCellAccessoryCheckmark。如果您将 UITableViewCell 子类化,则可以在 prepareForReuse 中将其重置为 UITableViewCellAccessoryDisclosureIndicator,或者在上面的代码中,如果单元格不为零,则将其设置为 UITableViewCellAccessoryDisclosureIndicator。

if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
} else {
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator
于 2013-10-04T23:33:52.883 回答