【发布时间】:2012-10-24 17:52:03
【问题描述】:
我有一个标准的 UITableView。我想将单元格的textLabel 的shadowColor 设置为[UIColor whiteColor],但仅在触摸单元格时。为此,我使用以下代码。它是一个自定义 UITableViewCell 子类,它覆盖了 setSelected/setHighlighted:
@implementation ExampleTableViewCell
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated];
[self setShadowColorSelected:selected];
}
- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {
[super setHighlighted:highlighted animated:animated];
[self setShadowColorSelected:highlighted];
}
- (void)setShadowColorSelected:(BOOL)selected {
if (selected) {
self.textLabel.shadowColor = [UIColor blackColor];
}else {
self.textLabel.shadowColor = [UIColor whiteColor];
}
}
@end
我对这种方法的问题是,在取消选择时,单元格的时间很短,标签的文本和阴影都是白色的。请看这个截图,它是在取消选择:
这与这两个帖子中的方法基本相同:
UILabel shadow from custom cell selected color
Removing text shadow in UITableViewCell when it's selected
我在后一个问题中使用了接受答案的方法。
我创建了一个非常简单的代码项目和uploaded it to github。它显示了我的问题。它只是一个显示单个单元格的 UITableViewController。
除此之外,没有什么花哨的。 UITableView 委托方法:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (!cell) {
cell = [[ExampleTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
cell.textLabel.text = @"test";
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.tableView deselectRowAtIndexPath:indexPath animated:YES]; //setting this to NO doesn't work either!
}
有什么想法吗?
【问题讨论】:
-
我只是在这里大声思考,但是您是否尝试过在
setSelected或setHighlighted(其中之一)中设置条件,以便仅在@ 时调用setShadowColorSelected987654333@ 的值是true?这两种方法中的一种可能在另一种方法之前被调用,这就是为什么阴影在高光被移除之前变成白色的原因。 -
好吧,我尝试了类似的方法,它只实现了其中一种方法,所以要么
setSelected要么setHighlighted。导致相同的问题。 -
我不知道这里有什么问题,这种行为对我来说似乎是正确的。你不会指望
setHighlighted:或setSelected:在动画完成之前阻塞线程,是吗? -
不,我不知道。问题是,在上面的屏幕截图中,
shadowColor是白色的(这意味着 setSelected/setHighlighted 已在单元格上调用了 NO),但UILabel'stextColor也是白色的,这是它的 @ 987654342@。所以标签仍然处于“突出显示”状态,但单元格不是。 -
既然您知道您的方法是用
NO调用的,那么也许您也可以尝试在您的setShadowColorSelected方法中将self.textLabel.textColor设置为白色/黑色?
标签: iphone objective-c ios ipad uitableview