0

我有一个表格视图。我在单元格中添加了一个名为“lbl1”的标签。我实现了“heightForRowAtIndexPath”方法。并且我正在使用增加选定行的高度

[tblView beginUpdates];
[tblView endUpdates];

然后我在扩展区域的单元格中添加一个标签“lbl2”,这个标签应该只在选定的单元格中可见。

即使未选择特定单元格,这里“lbl2”也会显示在背景中。看起来像是覆盖“lbl1”。

有没有办法获得正确的输出?

4

2 回答 2

0

如果要在选定单元格中插入标签,请将其插入didselectRowAtIndexPath委托方法中。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *currentCell = [tableView cellForRowAtIndexPath:indexPath];
    //increase the cell height and then do the following:
    UILabel *lbl2 = [[UILabel alloc]init];
    *lbl2.text = @"Some text";
    [currentCell addSubview:lbl2]; //remember to position the label properly.        
}

希望这将是您正在寻找的解决方案。

编辑
如果要在选择另一行时删除标签,请保存先前选择的行的 indexPath 并下次删除标签,减小,更新高度,然后将选定的 indexPath 设置为变量,然后更新当前的。就像下面的代码一样:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cpreviousCell = [tableView cellForRowAtIndexPath:previousIndexPath];
    //remove lbl2 and decrease the height of the cell if required
    UITableViewCell *currentCell = [tableView cellForRowAtIndexPath:indexPath];
    //increase the cell height and then do the following:
    UILabel *lbl2 = [[UILabel alloc]init];
    *lbl2.text = @"Some text";
    [currentCell addSubview:lbl2]; //remember to position the label properly.
    //and finally set the indexPath
    previousIndexPath = indexPath;     
}
于 2013-10-08T08:41:59.253 回答
0

您还可以保留对先前选择的 indexPath 的引用,然后重新加载所选单元格的 indexPath 和新选择的单元格的 indexPath。

这(我认为)比抓住单元格本身要好,尤其是避免重新选择。由于 TableView 滚动,比较两个单元格以避免重新选择可能会失败,而比较 indexPath.row 总是可以的。

所以你想保留 indexPath,如果有变更电话:

NSArray *array = [NSArray arrayWithObjects:prevIndexPath,newIndexPath,nil]; 
[self.tableView reloadRowsAtIndexPaths:array withRowAnimation:UITableViewRowAnimationNone];   

当然,实际添加/删除标签应该在 cellForRowAtIndexPath 方法中完成。

于 2013-10-08T09:02:41.710 回答