将文本颜色更改为单击行并将其保留在内存中

时间:2014-12-22 16:54:28

标签: ios objective-c xcode

当用户单击TableView中的一行时,文本颜色会发生变化。

我的问题是如何在内存中保留单击的行以及何时返回TableView以使行具有新颜色?

这是在cellForRowAtIndexPath:

NSAttributedString * redString = [[NSAttributedString alloc] initWithString:cell.textLabel.text];

NSMutableAttributedString * attributedString = [[NSMutableAttributedString alloc] initWithAttributedString:redString];

NSRange boldedRange = NSMakeRange(0, redString.length);

[attributedString addAttribute: NSFontAttributeName value:[UIFont fontWithName:@"HelveticaNeue-LightItalic" size:15.0] range:boldedRange];

[attributedString addAttribute: NSForegroundColorAttributeName value: [UIColor redColor] range:boldedRange];

[cell.textLabel setAttributedText: attributedString];

提前致谢

1 个答案:

答案 0 :(得分:0)

我建议在NSMutableDictionary中保留UITableViewController,以跟踪已选择的单元格。然后,只要使用didSelectRowAtIndexPaht:

选择单元格,就可以更新字典

实施例

-(void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath{
    NSIndexPath *idxKey = [NSIndexPath indexForRow:indexPath.row inSection:indexPath.section];
    self.myMutableDictionary[idxKey] = @YES;
} 

如果在方法签名中提供了NSIndexPath,则必须创建tableView:cellForRowAtIndexPath,这似乎很奇怪。问题是,有时它实际上是一个可变的索引路径,并将失败。通过这种方式创建副本,您可以保证它是一个不可变的密钥。

获得字典后,您需要检查-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NSIndexPath *idxKey = [NSIndexPath indexForRow:indexPath.row inSection:indexPath.section]; id value = self.myMutableDictionary[idxKey]; if(value){ // Set color selected } else { // Set color not selected } } 中的字典,看看它是否已被选中。

{{1}}