1

我创建了 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)的索引。因此,理论上,它已从层中移除。

但是由于某种原因,它仍然显示在自定义按钮内,我不知道为什么。

现在我将通过简单地改变背景渐变的颜色来解决这个问题,但我真的很好奇为什么这段代码不起作用。

4

0 回答 0