我有一个表格视图。我在单元格中添加了一个名为“lbl1”的标签。我实现了“heightForRowAtIndexPath”方法。并且我正在使用增加选定行的高度
[tblView beginUpdates];
[tblView endUpdates];
然后我在扩展区域的单元格中添加一个标签“lbl2”,这个标签应该只在选定的单元格中可见。
即使未选择特定单元格,这里“lbl2”也会显示在背景中。看起来像是覆盖“lbl1”。
有没有办法获得正确的输出?
我有一个表格视图。我在单元格中添加了一个名为“lbl1”的标签。我实现了“heightForRowAtIndexPath”方法。并且我正在使用增加选定行的高度
[tblView beginUpdates];
[tblView endUpdates];
然后我在扩展区域的单元格中添加一个标签“lbl2”,这个标签应该只在选定的单元格中可见。
即使未选择特定单元格,这里“lbl2”也会显示在背景中。看起来像是覆盖“lbl1”。
有没有办法获得正确的输出?
如果要在选定单元格中插入标签,请将其插入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;
}
您还可以保留对先前选择的 indexPath 的引用,然后重新加载所选单元格的 indexPath 和新选择的单元格的 indexPath。
这(我认为)比抓住单元格本身要好,尤其是避免重新选择。由于 TableView 滚动,比较两个单元格以避免重新选择可能会失败,而比较 indexPath.row 总是可以的。
所以你想保留 indexPath,如果有变更电话:
NSArray *array = [NSArray arrayWithObjects:prevIndexPath,newIndexPath,nil];
[self.tableView reloadRowsAtIndexPaths:array withRowAnimation:UITableViewRowAnimationNone];
当然,实际添加/删除标签应该在 cellForRowAtIndexPath 方法中完成。