自定义的UITableViewCell选择风格?(Custom UITableViewCell se

2019-06-17 17:33发布

当我点击我UITableViewCell ,背景部分(即我的背景图片未覆盖区域),当我点击单元格变为蓝色。 此外,所有的UILabel当点击这是我想要的S于细胞转白。

但是我不想要的是蓝色的背景,当我点击它,但如果我这样做selectionstylenone ,然后我失去了高亮显示色彩为UILabel S IN的细胞。

那么,有没有办法刚刚摆脱了蓝色背景的被点击的细胞,但保持的突出显示颜色时UILabel S'

Answer 1:

你可以这样做如下。 设置你的表格单元格的选择风格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];
    }
}


Answer 2:

如果iOS7之前的工作,让你的选择没有风格

cell.selectionStyle = UITableViewCellSelectionStyleNone;

否则,由离开它UITableViewCellSelectionStyleDefault

然后:

UIView *selectedView = [[UIView alloc]init];
selectedView.backgroundColor = [UIColor redColor];
cell.selectedBackgroundView =  selectedView;

此代码将正常工作



Answer 3:

您选择样式设置为无后,您可以使用下面的委托方法:

-(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;
}


Answer 4:

在的cellForRowAtIndexPath使用此代码:

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

[cell.myLabel setHighlightedTextColor: [UIColor whiteColor]]; // for all your labels

希望这会为你工作。

享受编码:)



Answer 5:

为了得到这个工作,你必须设置选择风格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背景等。



Answer 6:

在你的子类中重写以下功能UITableViewCell

override func setHighlighted(highlighted: Bool, animated: Bool) { }
override func setSelected(selected: Bool, animated: Bool) { }


Answer 7:

为了匹配标准选择样式的行为,你要同时重写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()
    }
}


Answer 8:

在您的自定义单元格,覆盖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];
    }
}

另外,还要确保选择 设置样式



Answer 9:

我能得到它的工作的唯一方法是:

- (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;
}


Answer 10:

你也可以使用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;
        }];
    }
  }


文章来源: Custom UITableViewCell selection style?