UIButton子类突出显示错误(即使在点击或触摸后,突出显示仍然存在或持续存在)



我在应用程序中对UIButton进行了子类化,有时即使按下按钮,高亮颜色也会保持不变。我不知道到底是什么原因导致了这种情况,因为它似乎只是偶然发生的,但它似乎有50%的时间发生。我确信这是可复制的。当我在UITableViewCell中有一个按钮,并且在表视图仍在滚动时单击它时,我经常会遇到这种情况。

我在子类中重写setHighlighted方法的方式有什么问题吗?这是我的实现:

@implementation SCPFormButton
- (id)initWithFrame:(CGRect)frame label:(NSString *)label
{
self = [super initWithFrame:frame];
if (self) {
UILabel *buttonLabel = [[UILabel alloc] init];
buttonLabel.attributedText = [[NSAttributedString alloc] initWithString:[label uppercaseString] attributes:kButtonLabelAttributes];
[buttonLabel sizeToFit];
buttonLabel.frame = CGRectMake(kMaxWidth / 2 - buttonLabel.frame.size.width / 2, kStandardComponentHeight / 2 - buttonLabel.frame.size.height / 2, buttonLabel.frame.size.width, buttonLabel.frame.size.height);
[self addSubview:buttonLabel];
self.backgroundColor = kFormButtonColorDefault;
}
return self;
}
- (void)setHighlighted:(BOOL)highlighted
{
self.backgroundColor = highlighted ? kFormButtonColorHighlighted : kFormButtonColorDefault;
[self setNeedsDisplay];
}
@end

我会尝试在setHighlighted覆盖中调用super。事实上,UIControl的苹果文档状态:

如果控件高亮显示,请指定YES;否则为否。默认情况下,控件不会高亮显示。在跟踪过程中,当触摸进入和退出以及出现触摸时,UIControl会自动设置并清除此状态。

因此,UIControl中似乎有某种状态处理与此相关。

如果这没有帮助,我会尝试添加一个日志跟踪,这样你就可以在处理触摸时检查按钮处于哪个状态。

您缺少对super的调用。但是,无论如何,不建议对UIButton进行子类化,我会尝试使用setBackgroundImage:forState。

最新更新