我创建了 UIButton 的自定义子类来封装我遇到的一些特定问题(客户希望将渐变作为大多数按钮的背景)。到目前为止,这项工作已按计划进行。
但是,我创建的其中一件事是自定义“突出显示”来替换内置突出显示,因为不允许使用自定义按钮。我很幸运能够覆盖超类函数以突出显示,如下所示:
-(void) setHighlighted:(BOOL)highlighted
{
[super setHighlighted:highlighted];
NSLog(@"Set highlighted called: %i", highlighted);
if (self.highlight==nil) {
self.highlight=[CAGradientLayer layer];
gradient.colors=[NSArray arrayWithObjects:
(id)[[UIColor colorWithWhite:1.0 alpha:.4] CGColor],
(id)[[UIColor colorWithWhite:0.0 alpha:.4] CGColor],
nil];
}
if(highlighted)
{
[[self layer] addSublayer:highlight];
}
else {
NSLog(@"Highlight should be removed...");
NSLog(@"Highlight index: %i", [[[self layer] sublayers] indexOfObject:highlight]);
[self.highlight removeFromSuperlayer];
NSLog(@"Highlight index: %i", [[[self layer] sublayers] indexOfObject:highlight]);
}
}
不幸的是,高光层似乎没有正确地删除自己。正如您在我的代码中看到的那样,我正在检查突出显示在删除之前(2)和删除之后(2147483647,AKA NSNotFound)的索引。因此,理论上,它已从层中移除。
但是由于某种原因,它仍然显示在自定义按钮内,我不知道为什么。
现在我将通过简单地改变背景渐变的颜色来解决这个问题,但我真的很好奇为什么这段代码不起作用。