回到桌面时保持文本单元格的颜色

时间:2014-09-17 16:05:11

标签: ios objective-c uitableview

我更改了表格中单击的单元格的文本颜色。但是在单击单元格后,当我回到表格时,单元格的文本具有原始颜色。你能给我一个建议吗?

这是“didSelectRowAtIndexPath”

中的代码
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
cell.textLabel.highlightedTextColor = [UIColor blueColor];

谢谢

4 个答案:

答案 0 :(得分:2)

  

单击单元格后,当我回到表格时,单元格的文本具有原始颜色。你能给我一个建议吗?

您需要将每个单元格的颜色存储在表格以外的某个位置,以便您可以在表格重绘时自动重现所需的颜色。通常,您将拥有某种存储表格数据的数据结构,而这通常是保存用户所做更改的正确位置。表格视图的数据源应该有-tableView:cellForRowAtIndexPath:方法,根据您保存的内容以及任何其他单元格属性设置颜色。

答案 1 :(得分:0)

问题是,如果您滚动并在需要时重新创建它(滚动回单元格),iOS会抛弃您的单元格。

如果我是你,我会继承UITableViewCell并覆盖

- (void)setSelected:(BOOL)selected animated:(BOOL)animated;  

在那里你会有

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
     [super setSelected: selected animated: animated];
     self.textLabel.textColor = selected ? [UIColor blueColor] : [UIColor blackColor];
}

由于iOS UITableView会记住选择了哪个单元格,因此即使重新创建它也应该可以正常工作。

答案 2 :(得分:0)

这是因为单元格被重复使用,所以当你改变一些单元格的文本颜色属性时,它会像你期望的那样受到影响但是当你滚动并且那个单元格从屏幕上消失时它会被重新使用池和如果它再次出现在屏幕上,则表格视图会从重用池中获取一些单元格,但它的属性会有所不同,因此颜色将不会持续存在。

您应该保留某个位置,例如在NSMutableArray中,有关单击哪个表的信息。

您可以在单击单元格时向数组添加索引路径,并在cellForRowAtIndexPath:中检查数组中的此indexPath以及是否更改了相应的属性。

答案 3 :(得分:0)

它发生的原因是其他人所说的:细胞被重复使用。 存储选择状态或颜色将起作用,但是如果您只需要确保所选单元格的标签颜色与非选定单元格不同,则可以采用不需要使用支持数据结构的方式。

你只需要检查是否正在设置的单元格 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath当前是否被选中,并且可以通过[tableView indexPathForSelectedRow]实现如果表使用多个选择,则表使用单选,或[tableView indexPathsForSelectedRows]。 最后一种情况要求您在返回的数组中找到当前的indexPath,并且可能比使用支持数组慢。 但如果选择很简单,那么这个解决方案可能更快,使用更少的内存并且更容易阅读(IMO)。