当我点击我UITableViewCell
,背景部分(即我的背景图片未覆盖区域),当我点击单元格变为蓝色。 此外,所有的UILabel
当点击这是我想要的S于细胞转白。
但是我不想要的是蓝色的背景,当我点击它,但如果我这样做selectionstylenone
,然后我失去了高亮显示色彩为UILabel
S IN的细胞。
那么,有没有办法刚刚摆脱了蓝色背景的被点击的细胞,但保持的突出显示颜色时UILabel
S'
当我点击我UITableViewCell
,背景部分(即我的背景图片未覆盖区域),当我点击单元格变为蓝色。 此外,所有的UILabel
当点击这是我想要的S于细胞转白。
但是我不想要的是蓝色的背景,当我点击它,但如果我这样做selectionstylenone
,然后我失去了高亮显示色彩为UILabel
S IN的细胞。
那么,有没有办法刚刚摆脱了蓝色背景的被点击的细胞,但保持的突出显示颜色时UILabel
S'
你可以这样做如下。 设置你的表格单元格的选择风格UITableViewCellSelectionStyleNone
。 这将删除蓝色背景突出显示。 然后,使文本标签的突出显示你所希望的方式,而不是使用默认的UITableViewCell类,创建的子类UITableViewCell
和覆盖的默认实现setHighlighted:animated
与自己的实现将标签的颜色,但是你根据需要突出显示的状态。
- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated
{
if (highlighted) {
self.textLabel.textColor = [UIColor whiteColor];
} else {
self.textLabel.textColor = [UIColor blackColor];
}
}
如果iOS7之前的工作,让你的选择没有风格
cell.selectionStyle = UITableViewCellSelectionStyleNone;
否则,由离开它UITableViewCellSelectionStyleDefault
然后:
UIView *selectedView = [[UIView alloc]init];
selectedView.backgroundColor = [UIColor redColor];
cell.selectedBackgroundView = selectedView;
此代码将正常工作
您选择样式设置为无后,您可以使用下面的委托方法:
-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
在这里实现你的代码,这样
-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
CustomCell *cell = (CustomCell *)[tableView cellForRowAtIndexPath:indexPath];
[cell.lbls setTextColor:[UIColor whiteColor]];
return indexPath;
}
在的cellForRowAtIndexPath使用此代码:
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
[cell.myLabel setHighlightedTextColor: [UIColor whiteColor]]; // for all your labels
希望这会为你工作。
享受编码:)
为了得到这个工作,你必须设置选择风格UITableViewCellSelectionStyleNone
然后你应该覆盖的方法setSelected:animated:
得到你想要的结果。 它做同样的事情,当你看到蓝色(或灰色)选择的iOS的自动选择机制一样。
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
if (selected) {
self.textLabel.textColor = [UIColor whiteColor];
} else {
self.textLabel.textColor = [UIColor blackColor];
}
}
您也可以以另一种方式自定义此,例如通过改变的UITableViewCell背景等。
在你的子类中重写以下功能UITableViewCell
。
override func setHighlighted(highlighted: Bool, animated: Bool) { }
override func setSelected(selected: Bool, animated: Bool) { }
为了匹配标准选择样式的行为,你要同时重写setHighlighted:animated:
和setSelected:animated:
。 你可能会想这些代码移动到一个共享的方法,以避免重复的代码。
override func setHighlighted(highlighted: Bool, animated: Bool) {
setAsSelectedOrHighlighted(highlighted, animated: animated)
super.setHighlighted(highlighted, animated: animated)
}
override func setSelected(selected: Bool, animated: Bool) {
setAsSelectedOrHighlighted(selected, animated: animated)
super.setSelected(selected, animated: animated)
}
func setAsSelectedOrHighlighted(selectedOrHighlighted: Bool, animated: Bool) {
let action = {
// Set animatable properties
}
if animated {
UIView.animateWithDuration(1.0, delay: 0, options: .CurveEaseInOut, animations: action, completion: nil)
}
else {
action()
}
}
在您的自定义单元格,覆盖awakeFromNib及的setSelected的默认实现:
- (void)awakeFromNib {
// Initialization code
UIImageView * imageView = [[UIImageView alloc] initWithFrame:self.bounds];
imageView.image = [UIImage imageNamed:@"cell_selected_img"];
self.selectedBackgroundView = imageView;
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
// Configure the view for the selected state
if (selected) {
self.lblCustomText.textColor = [UIColor whiteColor];
} else {
self.lblCustomText.textColor = [UIColor blackColor];
}
}
另外,还要确保选择 未设置样式为无 。
我能得到它的工作的唯一方法是:
- (void)awakeFromNib {
UIView *bgColorView = [[UIView alloc] init];
bgColorView.backgroundColor = [UIColor colorWithRed:(55.0/255.0) green:(163.0/255.0) blue:(237.0/255.0) alpha:1.0];
bgColorView.layer.masksToBounds = YES;
self.selectedBackgroundView = bgColorView;
}
你也可以使用contentView.alpha。 这里是例子。
首先,选择设置样式为你的:
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
接着,在自定义单元格类覆盖此方法与动画例如:
- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {
[super setHighlighted:highlighted animated:animated];
if (highlighted) {
[UIView animateWithDuration:0.15f animations:^{
self.contentView.alpha = 0.5f;
}];
} else {
[UIView animateWithDuration:0.35f animations:^{
self.contentView.alpha = 1.f;
}];
}
}