如何仅在TableView的选定单元格中显示标签?

时间:2013-10-08 08:28:03

标签: ios objective-c uitableview

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

增加所选行的高度
[tblView beginUpdates];
[tblView endUpdates];

然后我将标签“lbl2”添加到扩展区域中的单元格,此标签应仅在所选单元格中可见。

这里“lbl2”正在后台显示,即使没有选择特定的单元格。它看起来像覆盖“lbl1”。

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

2 个答案:

答案 0 :(得分: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;     
}

答案 1 :(得分:0)

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

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

所以你想要保持indexPath,如果有变更呼叫:

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

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