2012-11-12 21 views
0

如何让UITableViewCell中的自定义子图层消失setSelected:animated:自定义单元子图层和UITableViewCell选择

语境:

我已经加入了CAGradientLayerdrawRect:里面加入了自定义背景层我UITableViewCell,像这样:

- (void)drawRect:(CGRect)rect{ 
    [super drawRect:rect]; 

    [[self providerLabel] setTextColor:kOUBlue]; 
    [self addGrayLayer]; 
} 

- (void)addGrayLayer{ 
    [[[self contentView] layer] insertSublayer:[self grayGradientLayer] atIndex:0]; 
} 

- (CAGradientLayer *) grayGradientLayer{ 
    if (!_grayGradientLayer) { 
    CAGradientLayer *gradient = [CAGradientLayer layer]; 

    UIColor *white = [UIColor colorWithWhite:1 alpha:2]; 
    UIColor *gray = [UIColor colorWithRed:0.96 green:0.96 blue:0.96 alpha:1]; 

    [gradient setColors:@[(id)white.CGColor, (id)gray.CGColor]]; 
    [gradient setFrame:[self bounds]]; 

    _grayGradientLayer = gradient; 

    } 

    return _grayGradientLayer; 
} 

当用户点击一个细胞中,蓝色突出显示不出现。所以,我试图隐藏setSelected:animated:CAGradientLayer像这样:

- (void)setSelected:(BOOL)selected animated:(BOOL)animated 
{ 
    [super setSelected:selected animated:animated]; 

    // Configure the view for the selected state 

    if (selected) { 
    [[self grayGradientLayer] setHidden:YES]; 
    }else{ 
    [[self grayGradientLayer] setHidden:NO]; 
    } 

    [[self contentView] setNeedsDisplay]; 
} 

出现蓝色的背景,但直到推动画开始。有没有办法让我的蓝色立即出现?我还尝试添加第二个彩色的CAGradientLayer并手动交换它们,但在我看来,在隐藏setSelected:中的图层后,单元格不会立即重绘。

我试图强制单元格重绘,使用setNeedsDisplay没有运气。有任何想法吗?

+0

我认为你需要移动'[超级的setSelected:选择动画:动画]'你的逻辑下。直到选定了超级视图呼叫集后,才会隐藏灰色图层。 – mkral

回答

0

经过挖掘,I found this question,我意识到我使用了错误的方法。事实证明,我必须使用setHighlighted:animated:方法。

我的新代码如下所示:

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated{ 

    [super setHighlighted:highlighted animated:animated]; 

    if (highlighted) { 
    [[self grayGradientLayer] setHidden:YES]; 
    }else{ 
    [[self grayGradientLayer] setHidden:NO]; 
    } 
} 
相关问题