1

我是 xcode 的新手,我正在使用此代码从我的表中最多选择 10 行。这段代码正在工作,但它有一个问题,假设当我从中选择一行时,我的选择会自动选择其他一些值。我不明白这是什么错误,请帮我删除这个错误。谢谢你

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
 UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];
if ([selectedCell accessoryType] == UITableViewCellAccessoryNone) {
    if(count < 10)
    {
        [selectedCell setAccessoryType:UITableViewCellAccessoryCheckmark];
        [selectedobjects addObject:[NSNumber numberWithInt:indexPath.row]];
        count++;
    }

} else {
    [selectedCell setAccessoryType:UITableViewCellAccessoryNone];
    [selectedobjects removeObject:[NSNumber numberWithInt:indexPath.row]];
    count --;
}
}
4

2 回答 2

0

那是由于单元重用。您需要检查cellForRowAtIndexPath中选定的单元格并相应地指定附件类型。最好将所选项目的 indexPath 保存在didSelectRowAtIndexPAth而不是indexPath.rowas 中selectedObject。然后做

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

  // Do other stuff
  if ([selectedobjects containsObject:indexPath]) {
    [cell setAccessoryType:UITableViewCellAccessoryCheckmark];
  }
  else
   {
     [cell setAccessoryType:UITableViewCellAccessoryNone];
   }
}
于 2013-06-08T09:40:35.743 回答
0

在你的 .h 中取一个 NSMutable 字典,不要为字典做任何属性和合成。

在 CellForRowAtIndex 中使用这一行

if([tickmarkDictionary objectForKey:[NSString stringWithFormat:@"%d",[indexPath row]]])
{
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
    }
    else
    {
        cell.accessoryType = UITableViewCellAccessoryNone;
    }
    [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
}

并使用 DidSelectRowAtIndex 方法,如下所示。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *thisCell= (UITableViewCell *) [tableView cellForRowAtIndexPath:indexPath];

    if (thisCell.accessoryType == UITableViewCellAccessoryNone)
    {
        thisCell.accessoryType = UITableViewCellAccessoryCheckmark;

        [tickmarkDictionary setValue:[NSString stringWithFormat:@"%@",thisCell.textLabel.text] forKey:[NSString stringWithFormat:@"%d",[indexPath row]]];
    }
    else
    {
        if([tickmarkDictionary objectForKey:[NSString stringWithFormat:@"%d$%d",[indexPath section],[indexPath row]]])
        {
          [tickmarkDictionary removeObjectForKey:[NSString stringWithFormat:@"%d",[indexPath row]]];

        }
        NSLog(@"dict count %d",[tickmarkDictionary count]);
        thisCell.accessoryType = UITableViewCellAccessoryNone;
    }

     NSLog(@"dict count %d",[tickmarkDictionary count]);
}

现在,当您开始向上和向下滚动表格时,当您回到自动选择的行时,不会取消选择。

试试这个一次。我希望它对你有帮助。

于 2013-06-08T11:18:06.797 回答