我有一个普通的旧UITableViewCell,它有黑色文本,背景为黑色,上面和下面都有分隔符。
我想要的是当单元格突出显示或选中时,文本变为绿色但没有其他变化。如果没有子类化UITableViewCell,这可能吗?如果没有,那么确保子类变化尽可能少的最佳方法是什么?
答案 0 :(得分:0)
子类化单元格,覆盖方法setSelected:
。
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated];
_myLabel.textColor = (selected) ? [UIColor orangeColor] : [UIColor blackColor];
}
答案 1 :(得分:0)
是的,没有子类化您的单元格是可能的。 (仅供参考我现在在手机上输入这个,所以这个答案可能有些错误......但我认为一般的想法是正确的......)
首先,将单元格的选择样式设置为" none"防止背景颜色在选择时改变。其次,根据是否选择了单元格,在cellForRowAtIndexPath中设置标签的文本颜色,例如:
NSMutableArray *selectedCells;
- (void)viewDidLoad {
selectedCells = [[NSMutableArray alloc] init];
self.tableView.allowsMultipleSelection = YES;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// ... Create cell ...
cell.selectionStyle = UITableViewCellSelectionStyleNone;
if ([selectedCells containsObject:indexPath]) {
cell.textLabel.textColor = [UIColor greenColor];
} else {
cell.textLabel.textColor = [UIColor blackColor];
}
// ...the other code...
}
// If a cell's selected add it to the selectedCells array, if
// deselected, remove it; then reload the table
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if ([selectedCells containsObject:indexPath]) {
[selectedCells removeObject:indexPath];
} else {
[selectedCells addObject:indexPath];
}
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];
}