【发布时间】:2010-08-08 22:09:55
【问题描述】:
我正在加载一个自定义 nib 文件来自定义 UITableView 的单元格。自定义 nib 有一个 UILabel,它通过标签从主视图中引用。我想知道当单元格被选中时是否可以将 UILabel 的阴影颜色更改为不同的颜色,使其看起来不像屏幕截图中的那样。
【问题讨论】:
标签: iphone uitableview uilabel
我正在加载一个自定义 nib 文件来自定义 UITableView 的单元格。自定义 nib 有一个 UILabel,它通过标签从主视图中引用。我想知道当单元格被选中时是否可以将 UILabel 的阴影颜色更改为不同的颜色,使其看起来不像屏幕截图中的那样。
【问题讨论】:
标签: iphone uitableview uilabel
我更喜欢在 TableCell 代码中更改阴影颜色,以免污染委托。你可以重写这个方法来处理它:
- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animate
{
UIColor * newShadow = highlighted ? [UIColor clearColor] : [UIColor whiteColor];
nameLabel.shadowColor = newShadow;
[super setHighlighted:highlighted animated:animate];
}
【讨论】:
您可以在委托的-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];
}
【讨论】:
我遇到了同样的问题,以上解决方案都没有对我很有效 - 我不想继承 UITableViewCell 并且还以编程方式完成了一些棘手的选定/突出显示状态更改,这与解决方案不兼容以上。
我的解决方案:
我最后所做的是在主要UILabel 下方使用第二个UILabel 充当阴影。对于那个“阴影”UILabel,您可以将“突出显示颜色”设置为“清除颜色”。
显然,每次更新主标签时,您都必须更新影子标签。在很多情况下,付出的代价并不大。
希望有帮助!
【讨论】:
至少对于上面显示的示例而言,简单的答案是首先不显示阴影。由于您无论如何都看不到白底白字,请将 shadowColor 设置为 -clearColor。
如果你真的需要阴影,覆盖 -setHighlighted 方法是最好的解决方案。它将代码与单元格一起保存,我认为这比尝试从表格视图中处理它更好。
【讨论】: