0

当我从 UITableView 中选择一行时,该行和下面的其他行(所选行下方的几行)也被选中。预计只有选定的行是选定的行。

我的代码是:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
if (cell.accessoryType == UITableViewCellAccessoryCheckmark) {
    //Deselect
    cell.accessoryType = UITableViewCellAccessoryNone;
    cell.backgroundColor=[UIColor clearColor];
} else {
    //Select
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
    cell.backgroundColor=[UIColor redColor];
}
}

提前致谢!

4

2 回答 2

2

那可能是因为细胞被重复使用了。如果要使用背景色显示选中状态,需要在cell geter方法中设置

添加此代码应该可以工作:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //...
    if (!cell.selected) {
        //Deselected
        cell.accessoryType = UITableViewCellAccessoryNone;
        cell.backgroundColor=[UIColor clearColor];
    } else {
        //Selected
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
        cell.backgroundColor=[UIColor redColor];
    }

}
于 2012-01-12T10:13:31.173 回答
0

是的,您必须声明一个新的NSMutableArray(例如_selectedList)数据源计数。用值为 0 的 NSNumber 填充它。

NSMutableArray *_selectedList; 在 .h 文件中声明(作为类成员)

viewDidLoadinit方法中,

_selectedList = [[NSMutableArray alloc] init];
for( int i = 0; i < [datasource count]; i++ )
{
  [_selectedList addObject:[NSNumber numberWithBool:NO]];
}

并制作如下方法。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //...
    if (! [[_selectedList objectAtIndex:indexPath.row] boolValue]) {
        //Deselected
        cell.accessoryType = UITableViewCellAccessoryNone;
        cell.backgroundColor=[UIColor clearColor];
    } else {
        //Selected
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
        cell.backgroundColor=[UIColor redColor];
    }
}


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
  UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
  if (cell.accessoryType == UITableViewCellAccessoryCheckmark) {
    //Deselect
    cell.accessoryType = UITableViewCellAccessoryNone;
    cell.backgroundColor=[UIColor clearColor];
  } else {
    //Select
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
    cell.backgroundColor=[UIColor redColor];
  }
  BOOL isSelected = ![[_selectedList objectAtIndex:indexPath.row] boolValue];
  [_selectedList replaceObjectAtIndex:indexPath.row withObject:[NSNumber numberWithBool:isSelected]];
}
于 2012-01-12T10:58:49.033 回答