我有一个分组的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“这一行并没有什么区别。为什么会这样呢?
答案 0 :(得分: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);
}
希望这会有所帮助
答案 1 :(得分:0)
原来UITableView有更高级的东西在幕后进行,这让我无法实现我的目标。所以我正在尝试与UISwitch类似的东西。