美文网首页程序员
UITableViewCell按下时,底层图标会显示出来的问题

UITableViewCell按下时,底层图标会显示出来的问题

作者: 墨_辰 | 来源:发表于2018-07-06 16:53 被阅读9次

最近在画界面上的时候遇到了这样一个问题,在点击cell的时候被隐藏(放在底层)的复选框会显示出来(正常状态下没有问题),很影响体验。然后就开始找到底是什么问题。

问题图:


Snip20180706_3.png

cell的代码:


 self.btnCheck = [[UIButton alloc] init];

 [self.btnCheck setImage:[UIImage svgImageNamed:@"ic_unselect" size:CGSizeMake(20, 20) tintColor:SVG_NORMAL_COLOR] forState:UIControlStateNormal];

 [self.btnCheck setImage:[UIImage svgImageNamed:@"ic_selected" size:CGSizeMake(20, 20) tintColor:SVG_THEME_COLOR] forState:UIControlStateSelected];

 [self addSubview:self.btnCheck];

//多选框布局

 [self.btnCheck mas_makeConstraints:^(MASConstraintMaker *make) {

 make.left.equalTo(self.mas_left).offset(15);

 make.centerY.equalTo(self);

 make.size.mas_equalTo(CGSizeMake(20, 20));

 }];

//viewbackground布局

 [self.viewBackground mas_makeConstraints:^(MASConstraintMaker *make) {

 make.left.equalTo(self.mas_left).offset(15);

 make.right.equalTo(self.mas_right).offset(-5);

 make.top.equalTo(self.mas_top);

 make.bottom.equalTo(self.mas_bottom);

 }];

//长按操作

- (void) setSelectedMode:(BOOL) selected{

 if (selected) {

 [self.viewBackground mas_updateConstraints:^(MASConstraintMaker *make) {

 make.left.equalTo(self.mas_left).offset(35);

 }];

 }else{

 [self.viewBackground mas_updateConstraints:^(MASConstraintMaker *make) {

 make.left.equalTo(self.mas_left).offset(0);

 }];

 }

}

经过修改背景色等测试和查阅资料,最终确定问题是因为当cell处于highlighted/selected状态时,默认会执行如下动作:

1:将其所有子视图的backgroundColor设置为清除颜色(透明)。

2:突出显示可以突出显示的所有子视图内容(就是强调内容),例如UIImageView。

可以通过这一句代码解决,但是这样的话会导致没有点击效果。


self.selectionStyle = UITableViewCellSelectionStyleNone;

然后就重新写了一下高亮的选择效果,就没有问题了。

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

 [super setHighlighted:highlighted animated:animated];

 if (highlighted) {

 self.viewBackground.backgroundColor = UIColorFromHex(0xcccccc);

 } else {

 // 增加延迟消失动画效果

 [UIView animateWithDuration:0.1 delay:0.1 options:UIViewAnimationOptionCurveEaseInOut animations:^{

 self.viewBackground.backgroundColor = [UIColor whiteColor];

 } completion:nil];

 }

}

后来发现一个更加简单的方法,在cell中将btnCheck隐藏起来,在多选状态下将隐藏取消掉就可以了。


self.btnCheck.hidden = YES;

- (void) setSelectedMode:(BOOL) selected{

 if (selected) {

 self.btnCheck.hidden = NO;

 [self.viewBackground mas_updateConstraints:^(MASConstraintMaker *make) {

 make.left.equalTo(self.mas_left).offset(35);

 }];

 }else{

 self.btnCheck.hidden = YES;

 [self.viewBackground mas_updateConstraints:^(MASConstraintMaker *make) {

 make.left.equalTo(self.mas_left).offset(0);

 }];

 }

}

参考文章:

https://www.jianshu.com/p/0668ce0b46b8

https://blog.csdn.net/cuibo1123/article/details/53192441

相关文章

网友评论

    本文标题:UITableViewCell按下时,底层图标会显示出来的问题

    本文链接:https://www.haomeiwen.com/subject/vndbuftx.html