2

我有一个分组的 UITableView。当用户选择一行时,我希望该单元格变窄。我通过以下方式成功实现了这一目标:

//DidSelectRowAtIndexPath

UITableViewCell *cell = [myTable cellForRowAtIndexPath:indexPath];

If (selected == YES) {
    selected = NO;
    cell.frame = CGRectMake(cell.frame.origin.x, cell.frame.origin.y, 320, 35);
   } else { 
    selected = YES;
    cell.frame = CGRectMake(cell.frame.origin.x,     cell.frame.origin.y, 275, 35);
}

//end DidSelectRowAtIndexPath

现在这就像一个梦,但是当单元格被滚动出屏幕并再次返回时,它是全宽(320,顺便说一句,我并不是说视觉部分是 320 宽。我说的是实际的单元格框架)所以我在我的“CellForRowAtIndexPaths”方法中添加了“cell.frame = blahblahblah”行,它没有任何区别。为什么会这样?

4

2 回答 2

1

那是因为每次您将单元格滚动出屏幕并再次返回时,它都会重新创建。您需要添加检查或标记所选单元格(使用实例变量),然后调整单元格的宽度,tableView:cellForRowAtIndexPath:例如:

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

    ...

    if (selectedCellIndex == indexPath.row)
         cell.frame = CGRectMake(cell.frame.origin.x, cell.frame.origin.y, 320, 35);
    else
         cell.frame = CGRectMake(cell.frame.origin.x, cell.frame.origin.y, 275, 35);

}

希望这可以帮助

于 2012-07-08T04:53:54.867 回答
0

事实证明 UITableView 在幕后有更高级的东西,这使我无法实现我想要的。所以我正在尝试使用 UISwitch 进行类似的操作。

于 2012-07-09T14:10:12.297 回答