2010-08-08 76 views
9

我正在加载自定义的nib文件来自定义UITableView的单元格。自定义笔尖具有通过标记从主视图引用的UILabel。我想知道当单元格被选为不同的颜色时,是否可以更改UILabel的阴影颜色,因此它看起来不像截图中的样子。自定义单元格选择颜色的UILabel阴影

screenshot

回答

11

你可以在委托变更标签的阴影颜色-tableView:willSelectRowAtIndexPath:。例如:

-(NSIndexPath*)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath]; 
    cell.textLabel.shadowColor = [UIColor greenColor]; 
    return indexPath; 
} 
-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath]; 
    cell.textLabel.shadowColor = [UIColor redColor]; 
} 
+3

此答案对突出显示的单元格状态不起作用(即,如果用户按下单元格但未释放)。不幸的是,杰森的回答是我见过的最好的处理这种情况的最好答案。不幸的是,它涉及到子类。您可能还需要覆盖setSelected: – Prometheus 2012-05-01 23:17:53

16

我更喜欢在TableCell代码内部改变阴影颜色以不污染代表。您可以覆盖此方法来处理它:

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animate 
{ 
    UIColor * newShadow = highlighted ? [UIColor clearColor] : [UIColor whiteColor]; 

    nameLabel.shadowColor = newShadow; 

    [super setHighlighted:highlighted animated:animate]; 
} 
0

至少在上面显示的示例中,简单的答案是不首先显示阴影。由于无论如何你都看不到白色,因此请将shadowColor设置为-clearColor。

如果你确实需要阴影,重写-setHighlighted方法是最好的解决方案。它将代码保存在单元格中,我认为这比从表格视图中处理它好得多。

2

我有同样的问题,并没有上述解决方案相当适合我 - 我不想子类UITableViewCell,也有一些棘手的选择/突出显示的状态更改编程完成,这并没有与上述解决方案很好地发挥作用。

MySolution:

我到底做了什么是使用第二UILabel主要UILabel下充当影子。对于那个'阴影'UILabel,你可以设置'突出显示颜色'为'清除颜色'。

很明显,每次更新主标签时都必须更新阴影标签。在许多情况下,付出的代价并不是很大。

希望有帮助!