2012-11-12 30 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]; 
    } 
} 
相關問題