在做iOS項目的開發中,UITableView控件的應用十分廣泛。在進行自定義UITableViewCell時,經常有小夥伴遇到這樣的問題:在UITableViewCell上面添加了一個有背景顔色的子視圖,當使用者點選UITableViewCell或者選中UITableViewCell時,Cell上的子視圖發生了奇怪的變化,其背景色變透明了,如果添加在Cell上的子視圖隻是一個色塊,那麼我們看起來,這個子視圖好像莫名其妙的消失了一樣。如下圖所示:

産生這種情況的主要原因是由于UITableViewCell的選中風格所緻。如果開發者不進行設定,UITableViewCell中的selectionStyle屬性預設風格為UITableViewCellSelectionStyleBlue。這時,如果使用者點選或者選中了某個Cell,系統會自動将其上子視圖的背景色改成透明以便統一Cell的整體背景顔色。開發者可以将其設定為UITableViewCellSelectionStyleNone枚舉值來不适用任何Cell的選中風格。
如果需要使用Cell的選中風格同時又不想讓Cell上的子視圖收到影響,我們可以繼承UITableViewCell後在其中覆寫父類的如下兩個方法,在這些方法中重新設定子視圖的背景色:
//這個方法在Cell被選中或者被取消選中時調用
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
self.testLabel.backgroundColor = [UIColor orangeColor];
}
//這個方法在使用者按住Cell時被調用
-(void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated{
[super setHighlighted:highlighted animated:animated];
self.testLabel.backgroundColor = [UIColor orangeColor];
}
如下圖: