我有一个表格视图。我在单元格中添加了一个名为“lbl1”的标签。我实现了“heightForRowAtIndexPath”方法。并且Iam使用
增加所选行的高度[tblView beginUpdates];
[tblView endUpdates];
然后我将标签“lbl2”添加到扩展区域中的单元格,此标签应仅在所选单元格中可见。
这里“lbl2”正在后台显示,即使没有选择特定的单元格。它看起来像覆盖“lbl1”。
有没有办法获得正确的输出?
答案 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方法中完成。